Javascript 向for循环中的承诺数组添加承诺

Javascript 向for循环中的承诺数组添加承诺,javascript,node.js,promise,bluebird,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('d

让我们假设以下示例:

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');
});
var bb=require('bluebird');
var promiseStack=[];
对于(变量i=1;i<10;i++){
var deferred=bb.deferred();
承诺。推送(延期。承诺);
bb.延迟(2500).然后(函数(){
延迟。解决();
});
}
所有(promiseStack).然后(function()){
console.log('done');
});
这需要一点时间。2500ms,但不调用
console.log('done')
。 有什么问题,我做错了吗

最好的, redshark1802

有什么问题,我做错了吗

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

要解决这个问题,你可以试一下,但你不能。只要使用你已经拥有的承诺

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');
});
var bb=require('bluebird');
var promiseStack=[];
对于(var i=1;i<10;i++)//1到9???
承诺推送(bb.延迟(2500));
所有(promiseStack).然后(function()){
console.log('done');
});