防止重复对象但允许使用 Cloud-Code 和 Parse.com 作为后端进行更新
Prevent duplicate objects but allow Update with Cloud-Code and Parse.com as backend
我的云有问题 Code.My 问题解释为:
- 我有一个class"MyClass"
- 我只想在我的后端保存一个引用特定 属性 ("myID")
的对象
- 如果用户尝试保存此对象,但没有任何相同的对象 "myID" 保存它
- 如果用户尝试保存此对象并且已经有一个相同的对象 "myID" 更新现有对象的字段 ("address")。
我尝试使用以下代码:
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 日志中说:
Result: Error: 142 Error: 124 Too many recursive calls into Cloud Code
我知道我能达到我想要的吗?
您有一个 beforeSave
方法,该方法在应存储 MyClass
的对象时触发。如果此方法检测到要搜索的对象已经存在,则会修改此对象并尝试存储它。但这会再次触发 beforeSave
方法,依此类推,无限循环。
您可以在客户端执行此操作:检查对象是否存在。如果不是,则创建它,如果是,则向其添加一个条目。但是你应该知道你会遇到一个问题:如果超过1个客户端同时执行这段代码,他们可能都会发现该对象还不存在,并且会创建超过1个对象。
因此,我会从一开始就创建这样一个对象,并使用原子操作 addUniqueObject:forKey:
将条目添加到数组中。
您不需要在 beforeSave
中保存对象 - 您对 request.object
所做的任何更改都将在您调用 response.success()
时保存
我的云有问题 Code.My 问题解释为:
- 我有一个class"MyClass"
- 我只想在我的后端保存一个引用特定 属性 ("myID") 的对象
- 如果用户尝试保存此对象,但没有任何相同的对象 "myID" 保存它
- 如果用户尝试保存此对象并且已经有一个相同的对象 "myID" 更新现有对象的字段 ("address")。
我尝试使用以下代码:
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 日志中说:
Result: Error: 142 Error: 124 Too many recursive calls into Cloud Code
我知道我能达到我想要的吗?
您有一个 beforeSave
方法,该方法在应存储 MyClass
的对象时触发。如果此方法检测到要搜索的对象已经存在,则会修改此对象并尝试存储它。但这会再次触发 beforeSave
方法,依此类推,无限循环。
您可以在客户端执行此操作:检查对象是否存在。如果不是,则创建它,如果是,则向其添加一个条目。但是你应该知道你会遇到一个问题:如果超过1个客户端同时执行这段代码,他们可能都会发现该对象还不存在,并且会创建超过1个对象。
因此,我会从一开始就创建这样一个对象,并使用原子操作 addUniqueObject:forKey:
将条目添加到数组中。
您不需要在 beforeSave
中保存对象 - 您对 request.object
所做的任何更改都将在您调用 response.success()