云代码多次保存然后响应成功

cloud code multiple save then response success

本文关键字:然后 响应 成功 保存 代码      更新时间:2023-09-26

我在Parse应用程序数据库中有一个Game类和GamePlayer类,用户可以在其中玩游戏并赢得硬币。

在我的云代码功能中,我有以下代码

success : function(results) {
   Parse.Cloud.useMasterKey();
   if (results.length >= 2) {
       console.log("inside find query1 success.");
       for (var i = 0; i < object.length; i++) {
          if (i == 0) {
             results[0].set("finish_msg", "You won!");
             results[0].attributes.playerId.set("coins", (results[0].attributes.playerId.attributes.coins + 10) );
          } else if (i == 1) {
             results[1].set("finish_msg", "You won!");
             results[1].attributes.playerId.set("coins", (results[1].attributes.playerId.attributes.coins + 5) );
          } else {
             object[i].set("finish_msg", "You lost!");
          }
          object[i].save();
       }
      response.success({
            "result" : true
      });
   }
}

这里,playerId是一个指向User表的指针,我将第一个和第二个用户的硬币分别增加10和5。

我想做的是设置所有用户的完成消息状态(获胜/失败),并在保存后向客户端发送成功响应。在这里,保存过程需要一些时间。如何等待保存过程完成?

目前,此代码有时有效,有时无效。特别是当结果长度大于3。

请建议我如何更改代码以正确工作。

object[i].save()异步运行,response.success()停止任何正在进行的操作。因此,在接下来的几次保存开始时,早期的保存会结束,然后在循环结束时,一切都会停止。

解决这一问题的方法是承诺。。。

var promises = [];
for (var i = 0; i < object.length; i++) {
    // ... your for-loop code
    // add a promise to save to the array of promises
    promises.push(object[i].save());
}
// return a promise that is fulfilled when all the promises in the array are fulfilled
Parse.Promise.when(promises).then(function() {
    // all of the saved objects are in 'arguments'
    response.success({result:true});
}, function(error) {
    response.error(error);  // return errors, too, so you can debug
});
相关文章: