Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带解析保存和反同步循环的Javascript_Javascript_Loops_Pointers_Parse Platform - Fatal编程技术网

带解析保存和反同步循环的Javascript

带解析保存和反同步循环的Javascript,javascript,loops,pointers,parse-platform,Javascript,Loops,Pointers,Parse Platform,我保存了三个结果,但它们都是一样的。我遇到了dam Javascript异步循环问题。我怎样才能摆脱这一切 我的代码: var teamMatch = function(){ var Pairingteam = []; var promise = Parse.Promise.as(); var x = matchedPairingIds.length; while (x--) { var match = matchedPairingId

我保存了三个结果,但它们都是一样的。我遇到了dam 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();

问题是
匹配了.save()是一个异步操作。最有可能的情况是,您的函数在所有保存完成之前返回。要克服这一点,最好的办法是使用承诺。请在此阅读:

然后看一看

根据您的问题调整上述解决方案如下:

 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();
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();
承诺。什么时候;等待,直到传递给它的所有承诺都得到解决

编辑

我不确定您的
匹配的
变量来自哪里,但这里是更新的代码

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

我犯的错误是我举起了匹配的班级。需要在循环中定义匹配的。代码应该如下所示:

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

关于我把它放在哪里或如何实现的一些额外细节?你是说“那么”吗?我熟悉“then”,但不知道在这种情况下如何实现它。我在查承诺。什么时候;我肯定会得到承诺,其中有3个是我从你提议的SavePromissions数组中期望得到的。不幸的是,它仍然只保存这些值中的一个。更新为包含base promise解析SDK是完全无用的。我看到了其他的插图,它们有些启发性,但我没有把这些点联系起来。Promise.when()是一个很好的小技巧,但是您展示的示例和您提供的示例中所示的示例在数组中保存了3个相同的对象,并且只保存了一个parse对象,而不是3个唯一的parse.Objects。好吧,感觉我越来越近了,但现在在数组中没有得到任何结果。我在想也许我需要调用匹配();功能?我感谢这里的指导。请多走一步好吗?