为了防止创建某些对象,我在该类对象之前设置了一个条件,然后保存了云函数。
但是,当同时创建两个对象时,条件不会相应地起作用。
这是我的代码:
Parse.Cloud.beforeSave("Entry", function(request, response) {
var theContest = request.object.get("contest");
theContest.fetch().then(function(contest){
if (contest.get("isFilled") == true) {
response.error('This contest is full.');
} else {
response.success();
});
});
基本上,如果比赛已满,我不希望创建一个Entry对象。但是,如果剩余的比赛中有1个点并且同时保存了两个条目,则它们都会被添加。
我知道这是一个边缘案例,但却是一个合理的问题。
答案 0 :(得分:0)
Parse正在使用Mongodb,这是一个NoSQL数据库,旨在提供可扩展性,因此提供有限的同步功能。你真正需要的是互斥,遗憾的是foo_cont f1;
f1.add_element(10);
int a = f1.get_foo_vector()[0].get_bar();
字段不支持互斥。但是,Parse为计数器和数组字段提供原子性,您可以使用它来强制执行某些控制。
参见http://blog.parse.com/announcements/new-atomic-operations-for-arrays/ 和https://parse.com/docs/js/guide#objects-updating-objects
答案 1 :(得分:0)
通过使用递增来解决这个问题,然后在保存回调中进行检查(而不是获取对象并检查其上的布尔值)。
看起来像这样:
Parse.Cloud.beforeSave("Entry", function(request, response) {
var theContest = request.object.get("contest");
theContest.increment("entries");
theContest.save().then(function(contest) {
if (contest.get("entries") > contest.get("maxEntries")) {
response.error('The contest is full.');
} else {
response.success();
}
});
}