javascript - 将 promise 添加到 for 循环中的 promise 数组

标签 javascript node.js promise bluebird

<分区>

让我们假设以下示例:

var bb = require('bluebird');

var promiseStack = [];
var deferred = bb.defer();

promiseStack.push(deferred.promise);

bb.delay(2500).then(function() {
    deferred.resolve();
});

bb.all(promiseStack).then(function() {
    console.log('done');
});

为什么不能执行以下操作:

var bb = require('bluebird');

var promiseStack = [];


for(var i = 1; i < 10; i++) {
    var deferred = bb.defer();
    promiseStack.push(deferred.promise);

    bb.delay(2500).then(function() {
        deferred.resolve();
    });
}

bb.all(promiseStack).then(function() {
    console.log('done');
});

大约需要。 2500 毫秒,但未调用 console.log('done')。 有什么问题,我做错了吗?

最好的, redshark1802

最佳答案

What's the problem with, am I doing wrong?

您的deferred 变量不是循环体的局部变量,而是全局范围的变量。您每次都用新的 Deferred 覆盖它,并且只解析最后一个(但多次)。

要修复它,您可以尝试 closure ,但是你shouldn't use Deferred anyway .只需使用您已有的 promise !

var bb = require('bluebird');

var promiseStack = [];

for(var i = 1; i < 10; i++) // 1 to 9 ???
    promiseStack.push( bb.delay(2500) );

bb.all(promiseStack).then(function() {
    console.log('done');
});

关于javascript - 将 promise 添加到 for 循环中的 promise 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21885073/

相关文章:

javascript - 如何使用 Jasmine 测试 AngularJS Controller 返回的 Promise 值?

javascript - .then() 在 promise 解决之前触发

node.js - Nodejs Bluebird promise 在处理图像时失败

javascript - 从超链接单击添加文本框和标签

javascript - 替换 ul 中 <li> 标记中的文本

类上的 JavaScript 点击事件监听器

node.js - 为什么 fs 是 NodeJS 中唯一提供同步调用的 I/O 库

node.js - 如何在 NodeJS 上验证 AWS Cognito 访问 token

mysql - 在 sequelize 中关联两个表

javascript - 条件循环或条件循环,从性能 Angular 来看这是最好的