让我们假设以下示例:
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');
});
需要aprox。 2500ms但console.log('done')
未被调用。
有什么问题,我做错了吗?
最好的, redshark1802
答案 0 :(得分:12)
问题是什么,我做错了吗?
您的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');
});