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