我遇到bluebird concurreny
的问题。基本上我希望我的承诺一个接一个地被解雇。我发现可以使用bluebird
完成此操作。这是我的代码:
var getdep = Promise.promisify(
function getdep(module, cb ) {
console.log(module + " ...start ...")
ls(module, function(data) {
cb(null, data);
});
});
Promise.all([0,1,2,3,].map(function(data){
return getdep("uglify-js@2.4.24");
}, {concurrency: 1}))
.then(function(all){
console.log(all);
})
.catch(function(err){
console.log(err);
});
我所尊重的是({concurrency: 1}
)。
uglify-js@2.4.24 ...start ...
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
....
uglify-js@2.4.24 ...start ...
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
loading: uglify-js@2.4.24@latest
... 等等
但我所拥有的是:
uglify-js@2.4.24 ...start ...
uglify-js@2.4.24 ...start ...
uglify-js@2.4.24 ...start ...
uglify-js@2.4.24 ...start ...
loading: uglify-js@2.4.24@latest
这意味着bluebird
同时开始了我的所有承诺。
你能告诉我我的代码有什么问题吗?感谢
答案 0 :(得分:2)
您使用的是Array#map而非Promise.map
Promise.all(
[0,1,2,3,].map(function(data){
// array.map
return getdep("uglify-js@2.4.24");
}, {concurrency: 1}) // end of array.map
)
.then(function(all){
console.log(all);
})
.catch(function(err){
console.log(err);
});
Array.map不理解{concurrency:1}参数 - 它将其用作回调的thisArg
要使用Promise.map,请像这样使用Promise.map
Promise.map([0,1,2,3,], function(data){
return getdep("uglify-js@2.4.24");
}, {concurrency: 1}))
.then(function(all){
console.log(all);
})
.catch(function(err){
console.log(err);
});