首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript使用异步循环保存

Javascript使用异步循环保存
EN

Stack Overflow用户
提问于 2015-03-17 11:23:19
回答 2查看 66关注 0票数 0

我保存了三个结果,但它们都是一样的。我遇到了异步循环问题。我该怎么摆脱这一切?

我的代码:

代码语言:javascript
复制
 var teamMatch = function(){
     var Pairingteam = [];
     var promise = Parse.Promise.as();
     var x = matchedPairingIds.length;
     while (x--) {
         var match = matchedPairingIds[x];
         var matching = function () {
             matched.set("team", {
               __type: "Pointer",
               className: "_User",
               objectId: "yCDDEWoiwM"
               });
             matched.set("Pairing", {
              __type: "Pointer",
              className: "Pairing",
              objectId: match
              });
             Pairingteam.push(matched.save());
            }
          }
          promise.then(function(){
            return Parse.Promise.when(Pairingteam);
          });
      }
     teamMatch();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 22:29:51

错误是我把同班同学吊起来了。匹配需要在循环中定义。代码应该如下所示:

代码语言:javascript
复制
var teamMatch = function(){
     var Pairingteam = [];
     var promise = Parse.Promise.as();
     var x = matchedPairingIds.length;
     while (x--) {
         var matched = new Parse.Object("Matched"); //THIS IS THE MISSING PIECE
         var match = matchedPairingIds[x];
         var matching = function () {
             matched.set("team", {
               __type: "Pointer",
               className: "_User",
               objectId: "yCDDEWoiwM"
               });
             matched.set("Pairing", {
              __type: "Pointer",
              className: "Pairing",
              objectId: match
              });
             Pairingteam.push(matched.save());
            }
          }
          promise.then(function(){
            return Parse.Promise.when(Pairingteam);
          });
      }
     teamMatch();
票数 1
EN

Stack Overflow用户

发布于 2015-03-17 12:48:00

问题是matched.save();是一个异步操作。很可能您的函数在所有保存完成之前返回。要克服这个问题,最好的办法就是使用承诺。在这里读一读:guide#promises

然后看看Parse JavaScript SDK and Promise ChainingMultiple Queries Parse Javascript

将上述解决方案应用于您的问题如下:

代码语言:javascript
复制
 var partnerMatch = function() {
 var savePromises = [];  // this will collect save promises 

// Create a trivial resolved promise as a base case.
 var promise = Parse.Promise.as();
 var x = matchArray.length // x = 3
 while (x--) {
     var matched = matchArray[x];
     var matching = function() {
         matched.set("partner", {
             __type: "Pointer",
             className: "_User",
             objectId: "yCDDEWoiwM"
         });
         matched.set("match", match);
         savePromises.push(matched.save());
     }
 }

 promise.then(function(){
   // now do the saves
   return Parse.Promise.when(savePromises);
 });
 }
 partnerMatch();

Promise.When();等待直到传递给它的所有承诺都被解析。

编辑

我不知道matched变量是从哪里来的,但是下面是更新的代码

代码语言:javascript
复制
 var teamMatch = function(){
 var Pairingteam = [];
 var promise = Parse.Promise.as();
 var x = matchedPairingIds.length;
 while (x--) {
     var match = matchedPairingIds[x];
     matched.set("team", {
       __type: "Pointer",
       className: "_User",
       objectId: "yCDDEWoiwM"
       });
     matched.set("Pairing", {
      __type: "Pointer",
      className: "Pairing",
      objectId: match
      });
     Pairingteam.push(matched.save());
     }
      promise.then(function(){
        return Parse.Promise.when(Pairingteam);
      });
  }
 teamMatch();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29097809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档