Разобрать передСохранить не вызывая
Я сохраняю объект с именем "Post", и у меня есть поле с именем "author", которое является указателем на класс Parse.User. Когда я создаю новый объект 'Post', я передаю значение 'author' в качестве значения Parse.User.id моей функции Cloud Code. Очевидно, что это приведет к ошибке типа в поле "author", так как это строка и она ищет объект Parse.User.
Поэтому, чтобы избежать этого, я установил триггер beforeSave, который проверял бы значение 'author', и, если бы он имел тип string, запрашивал класс Parse.User для идентификатора пользователя и устанавливал значение author как возвращаемое Promise.
НО.. мой триггер beforeSave, похоже, не вызывается по каким-либо причинам. Кто-нибудь знает, почему это может происходить? Первоначально я думал, что моя облачная функция исчерпала время, но моя функция завершается и выдает ошибку типа, которую я ожидал, так как я передаю строку в поле Pointer.
Вот мой код:
Parse.Cloud.beforeSave('Post', function (request, response) {
var author = request.object.get('author');
if (typeof author == 'string') {
var qry = Parse.Query(Parse.User);
qry.get(author, {
success: function (user) {
request.object.set('author', user);
response.success();
},
error: function (u, err) {
response.error(err.message);
}
});
} else {
response.success();
}
});
Parse.Cloud.define("post_update", function(request, response) {
var vals = request.params;
/**
* Update if vals.objectId is set otherwise error
*/
if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
var qry = new Parse.Query('Post');
qry.get(vals.objectId, {
success: function (obj) {
delete vals.objectId;
obj.save(vals, {
success: function (nobj) {
response.success({redirect: false, object: nobj.id});
},
error: function (nobj, err) {
response.error(err.message);
}
});
},
error: function (obj, err) {
response.error(err.message + ': ' + vals.objectId);
}
});
} else {
response.error('Unable to update post');
}
});
Вот моя работа:
Parse.Cloud.define("post_update", function(request, response) {
var vals = request.params;
var onSave = {
success: function (nobj) {
response.success({redirect: false, object: nobj.id});
},
error: function (nobj, err) {
response.error(err.message);
}
};
/**
* Update if vals.objectId is set otherwise error
*/
if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
var qry = new Parse.Query('Post');
qry.get(vals.objectId, {
success: function (obj) {
delete vals.objectId;
if (typeof vals['author'] === 'string') {
var uqry = new Parse.Query(Parse.User);
uqry.get(vals.author, {
success: function (u) {
vals.author = u;
obj.save(vals, onSave);
},
error: function (u, err) {
vals.author = null;
obj.save(vals, onSave);
}
});
} else {
vals.author = null;
obj.save(vals, onSave);
}
},
error: function (obj, err) {
response.error(err.message + ': ' + vals.objectId);
}
});
} else {
response.error('Unable to update post');
}
});