Bluebird -如何在数组块中循环,等待块响应



有一种方法可以循环通过id数组,在块中,并等待该块的响应继续循环?

,

Promise = require("bluebird")
function(array){
  return Promise.*something that will loop chunks from my array and wait for each chunk response*.map(function(id){
          return myfunction(id);
        });
}

我的问题是我需要等待我正在访问的DB的响应,并且它不能回答我同时创建的所有调用。我的代码抛出了一个超时异常,因为我太激进了。

我的代码如下:

Promise = require("bluebird")
function(array){
 return Promise.map(array, function(id){
        return myfunction(id);
      });
}

编辑:我找到解决办法了!

Promise = require("bluebird")
function(array){
 return Promise.map(array, function(id){
        return myfunction(id);
      }, {concurrency: 10});
}

如果您不使用承诺,async模块有很多方法来处理这些场景。如果您想一次发出一个请求,您可以使用eachSeries()。如果你想要更有效率一点,你可以使用parallelLimit,它可以确保同时触发最多X个回调。

也有async的承诺版本,如async-q和蓝鸟承诺端口

最新更新