繁体   English   中英

索引的Javascript解析承诺循环

[英]Indexed Javascript Parse Promise Loops

我正在尝试使用类1给出的值在类2中查找与类1的值相关的更多值。 我本打算通过循环k的值来执行此操作,但是,无论将循环放在哪里,它都仅使用k的最终值。 谁能告诉我在处理承诺时如何处理索引的必要性? 我对诺言和解析都是陌生的。 编辑:如果支架放错了位置。

var Class1 = Parse.Object.extend("Class1");
var Class2 = Parse.Object.extend("Class2");

Parse.Promise.as().then(function () {

  var query = new Parse.Query(Class1);
  return query.find()

  }).then(function (class1IDs) {
    for (var k = 0; k < class1IDs.length; k++) {

      var class1IDEntry = class1IDs[k];
      var class1ID = class1IDEntry.id;

      Parse.Promise.as().then(function () {
        var class1 = new Class1();
        class1.id = class1ID;

        var query = new Parse.Query(Class2); //
        query.equalTo("class1", class1);
        return query.find()

      }).then(function (class2IDs) {
        var stuff;
      });
    }

  }).then(function() {
    done();
  }, function(error) {
    console.log(error);
    done(new Error(error));
  });
});

您想等待完成for done()调用之前的for循环中创建的所有promise-循环中的查询应该串行还是并行运行? 您遇到的另一个问题是由于代码的异步性质,所有class1.id = class1ID将具有class1ID中最后一项的class1IDs (您怀疑)

依次运行class1ID

var Class1 = Parse.Object.extend("Class1");
var Class2 = Parse.Object.extend("Class2");

Parse.Promise.as().then(function() {
    var query = new Parse.Query(Class1);
    return query.find()
}).then(function(class1IDs) {
    return class1IDs.reduce(function(promise, class1IDEntry) {
        var class1ID = class1IDEntry.id;
        var class1 = new Class1();
        class1.id = class1ID;
        var query = new Parse.Query(Class2); //
        query.equalTo("class1", class1);
        return promise.then(function() {
            return query.find();
        }).then(function(class2IDs) {
            var stuff;
        });
    }, Parse.Promise.as());
}).then(function() {
    done();
}, function(error) {
    console.log(error);
    done(new Error(error));
});

并行运行class1ID

var Class1 = Parse.Object.extend("Class1");
var Class2 = Parse.Object.extend("Class2");

Parse.Promise.as().then(function() {
    var query = new Parse.Query(Class1);
    return query.find()
}).then(function(class1IDs) {
    return Parse.Promise.when.apply(null, class1IDs.map(function(class1IDEntry) {
        var class1ID = class1IDEntry.id;
        var class1 = new Class1();
        class1.id = class1ID;
        var query = new Parse.Query(Class2); //
        query.equalTo("class1", class1);
        return query.find()
        .then(function(class2IDs) {
            var stuff;
        });
    }));
}).then(function() {
    done();
}, function(error) {
    console.log(error);
    done(new Error(error));
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM