我有以下beforeSave函数,如果有相同的fbEventId,则应该删除一个条目。如果查询没有找到任何条目,它也应该返回成功(要保存的新数据)。
Parse.Cloud.beforeSave("FbEvent", function(request, response) {
var query = new Parse.Query("FbEvent");
query.equalTo("fbEventId", request.object.get("fbEventId"));
query.find({
success: function(results){
if (results.length>0){
var toRemove = results[0];
console.log(toRemove);
toRemove.destroy({
success: function(toRemove){
response.success();
}, error: function(toRemove, error){
response.error("Failed when destroying existing entry.");
}
});
} else {
response.error();}
}, error: function(error){
response.error("Error");
}
});
});
这将返回以下日志:
I2015-01-04T17:46:43.884Z] v158: before_save triggered for FbEvent
Input: {"original":null,"update":{"locationFbId":"locationId","startDate":"2014-12-25T00:30:00-0200","fbEventId":"1590722614482003","fbEventName":"O Beco Invade a Cidade Baixa! | Open Bar de Natal"}}
Result: Validation failed
有什么想法吗?
答案 0 :(得分:1)
所以这个结果是因为
response.error()
正在调用而没有参数。您的问题是,当您真的要调用response.success()时,您正在调用response.error()。见下文:
Parse.Cloud.beforeSave("FbEvent", function(request, response) {
var query = new Parse.Query("FbEvent");
query.equalTo("fbEventId", request.object.get("fbEventId"));
query.find({
success: function(results){
if (results.length>0){
// This block here will remove only the first conflicting entry, if you want to simply not save this entry, then user response.error("Entry with this id exists, canceling save");
var toRemove = results[0];
console.log(toRemove);
toRemove.destroy({
success: function(toRemove){
response.success();
}, error: function(toRemove, error){
response.error("Failed when destroying existing entry.");
}
});
} else {
// There are 0 elements in the resulting array, so we do want to save, meaning we should return success
response.success();}
}, error: function(error){
response.error("Error");
}
});
});