我想并行执行一组 Promise,然后等待所有 Promise 执行完毕。
这个有效:
var promises = [];
objects.forEach(function(object) {
let promise = new Parse.Promise.as()
.then(
function() {
return destroy(object);
}
);
promises.push(promise);
});
return Parse.Promise.when(promises);
但是如果我使用 for (object of objects) {...}
而不是 objects.forEach(function(object) {...});
它不起作用。对于数组中的每个 Promise,destroy(object);
在数组中的第一个对象上执行:
var promises = [];
for (object of objects) {
let promise = new Parse.Promise.as()
.then(
function() {
return destroy(object);
}
);
promises.push(promise);
});
return Parse.Promise.when(promises);
这是为什么?
最佳答案
是的,您忘记将 object
变量声明为循环体的局部变量(另请参阅 canonical explanation ):
var promises = [];
for (let object of objects) {
// ^^^
promises.push(new Parse.Promise.as().then(function() {
return destroy(object);
}));
}
return Parse.Promise.when(promises);
当然你也不应该这样做,你应该只使用map
:
var promises = objects.map(function(object) {
return new Parse.Promise.as().then(function() {
return destroy(object);
});
});
return Parse.Promise.when(promises);
关于javascript - 在 for...of 循环而不是 forEach 中创建 Promises?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931389/