2014-09-23 124 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"); 
    } 
});