javascript - 在 for...of 循环而不是 forEach 中创建 Promises?

标签 javascript foreach promise parse-server for-of-loop

我想并行执行一组 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/

相关文章:

javascript - 在javascript中同时循环两个数组

javascript - 在 50 个小块中用 Javascript 执行 10 万个 Promise

javascript - 未捕获的类型错误 : Cannot read property '_aData' of undefined

javascript - var that = this VS dojo.hitch()

javascript - 避免 iPhone 超时

php - Codeigniter:foreach 方法或结果数组?? [模型+ View ]

javascript - 如何使用 Google Chrome 开发者工具查看特定的函数调用及其参数?

php - 根据列值对子数组进行分组

javascript - 如何等待 QueryDocumentSnapshot.docs.forEach 结束返回

angularjs - 为什么我在测试 promise 内的代码时会丢失调用上下文( Angular + Jasmine )