javascript - bluebird没有正确启动promises

时间:2016-12-13 15:32:36

标签: promise bluebird

我遇到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同时开始了我的所有承诺。 你能告诉我我的代码有什么问题吗?感谢

1 个答案:

答案 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);
 });