我遇到了Cloud Code的问题。我的问题解释为:
我尝试使用此代码:
var MyObject = Parse.Object.extend("MyClass");
Parse.Cloud.beforeSave("MyClass", function(request, response) {
if (!request.object.get("myID")) {
response.error('A MyObject must have a unique myID.');
} else {
var query = new Parse.Query(MyClass);
query.equalTo("myID", request.object.get("myID"));
query.first({
success: function(object) {
if (object) {
object.set('address',request.object.get("address"));
object.save().then(function () {
response.error('Updated existing MyObject address');
},function (error) {
response.error("Error: " + error.code + " " + error.message);
});
} else {
response.success();
}
},
error: function(error) {
response.error("Could not validate uniqueness for this MyObject object.");
}
});
}
});
但这不起作用,在我的Parse.com日志中说:
结果:错误:142错误:124对Cloud Code的递归调用太多
我知道我可以实现我想要的吗?
答案 0 :(得分:0)
当存储beforeSave
的对象时,会触发MyClass
方法。如果此方法检测到搜索的对象已存在,则会修改此对象并尝试存储它。但这会再次触发beforeSave
方法,依此类推,无限循环。
您可以在客户端执行此操作:检查对象是否存在。如果没有,请创建它,但如果是,请为其添加一个条目。但是你应该知道你会遇到一个问题:如果有多个客户端同时执行这个代码,他们都可以发现该对象尚不存在,并且将创建多个对象。
我会从一开始就创建这样一个对象,并使用原子操作addUniqueObject:forKey:
向数组中添加条目。
答案 1 :(得分:0)
您无需在beforeSave
中保存对象 - 当您致电request.object
response.success()
所做的任何更改都将被保存