[英]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.