我正在保存一个名为“Post”的对象,并且我有一个名为“author”的字段,它是 Parse.User 类的指针。当我创建一个新的“发布”对象时,我将“作者”值作为 Parse.User.id 值传递给我的云代码函数。显然,这会导致“作者”字段出现类型错误,因为它是一个字符串并且它正在寻找一个 Parse.User 对象。
所以为了避免这种情况,我设置了一个 beforeSave 触发器,它会检查 'author' 的值,如果它是字符串类型,则查询 Parse.User 类的用户 ID 并将作者值设置为返回的 Promise。
但是..我的 beforeSave 触发器似乎并没有因为任何原因被调用。有谁知道为什么会发生这种情况?最初我以为是我的云函数没有时间了,但我的函数正在完成并给我我预期的类型错误,因为我将一个字符串传递到一个指针字段。
这是我的代码:
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');
}
});