2014-09-23 127 views
0

我已經定義了一個雲功能來在用戶表中設置自定義列。我有6個返回的結果我的查詢,但現場的更新只發生了3行,我不明白什麼是錯用下面的代碼,Parse.com:更新用戶表不起作用

Parse.Cloud.define("updateSaturdayAbsentWeeks", function(request, response) { 
// User master key so that we can update all users 
Parse.Cloud.useMasterKey(); 
// Tables to Query 
var query = new Parse.Query(Parse.User); 
// We want only players who are absent on Saturdays 
query.equalTo("isSaturdayAbsent", true); 
query.find({ 
    success: function(results) {  
     console.error('updateSaturdayAbsentWeeks, Saturday absent players count ' + results.length); 
     for (var i = 0; i < results.length; i++) { 
      var absentUser = results[i]; 
      var absentWeeks = absentUser.get('saturdayAbsentWeeks') - 1; 
      absentUser.set("saturdayAbsentWeeks", absentWeeks); 
      absentUser.save(); 
      console.error('updateSaturdayAbsentWeeks, absentWeeks for user name = ' + absentUser.get('username') + ', is = ' + absentWeeks) 
     } 

     // All done 
     response.success("updateSaturdayAbsentWeeks finished successfully"); 
    }, 
    error: function() { 
     console.error("runSaturdayExpense, lookUp Failed - Each player enjoyed the game on Saturday "); 
     response.error("updateSaturdayAbsentWeeks failed"); 
    } 
}); 
}); 

查詢後,我可以看到它回到6分的記錄,但在對循環它只會更新3條記錄,不會對其他三條記錄做任何事情,也不會返回任何錯誤。

任何指針要了解爲什麼所有6條記錄沒有得到更新將不勝感激。

感謝

回答

2

這同一個事實,即save()功能是異步的事情。正確的方法是使用saveAll()

query.find({ 
    success: function(results) { 
     var saveThese = []; 
     for (var i = 0; i < results.length; i++) { 
      var absentUser = results[i]; 
      var absentWeeks = absentUser.get('saturdayAbsentWeeks') - 1; 
      absentUser.set("saturdayAbsentWeeks", absentWeeks); 
      saveThese.push(absentUser); 
     } 
     Parse.Object.saveAll(saveThese, { 
      success: function (list) { 
       response.success("updateSaturdayAbsentWeeks finished successfully"); 
      }, 
      error: function (error) { 
       response.error("did not save all the items"); 
      } 
     }); 
    }, 
    error: function() { 
     response.error("updateSaturdayAbsentWeeks failed"); 
    } 
});