【问题标题】:adding promises to an array of promises in a for loop [duplicate]在for循环中向一组承诺添加承诺[重复]
【发布时间】:2014-03-20 01:18:00
【问题描述】:

让我们假设以下示例:

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

【问题讨论】:

    标签: javascript node.js promise bluebird


    【解决方案1】:

    有什么问题,我做错了吗?

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

    要修复它,您可以尝试closure,但您可以尝试shouldn't use Deferred anyway。只需使用您已经拥有的承诺!

    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');
    });
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2015-12-18
      • 2020-05-14
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      相关资源
      最近更新 更多