2016-01-24 61 views
0

爲了防止創建某些對象,我在該類型的對象的beforeSave雲功能中設置了條件。併發beforeSave調用允許重複

但是,當同時創建兩個對象時,條件不會相應地工作。

這裏是我的代碼:

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

解析是使用Mongodb,這是一個NoSQL數據庫,其設計非常具有伸縮性,因此提供了有限的同步功能。您真正需要的是互斥,但不幸在Boolean字段中不受支持。然而,Parse爲計數器和數組字段提供了原子性,您可以使用它們來強制執行某些控制。

利用增量,然後做在保存回調的檢查(而不是獲取的對象,並對其檢查布爾)查看http://blog.parse.com/announcements/new-atomic-operations-for-arrays/https://parse.com/docs/js/guide#objects-updating-objects

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(); 
    } 
    }); 
}