2015-09-04 38 views
3

有一种方法可以在块中循环遍历一个ID数组,并等待这个块的响应继续循环?Bluebird - 如何在块中循环数组,等待块响应

如:

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

回答

1

如果您没有使用承诺,async模块有很多方法来处理这些情况。如果您想一次提出一个请求,则可以使用eachSeries()。如果您希望效率更高一些,则可以使用parallelLimit,这可确保同时触发最大X回调。

也有承诺版本的异步,如async-q和bluebird-promise端口。

+0

是的,我需要它是一个承诺。蓝鸟承诺端口究竟是什么? –

+1

他们采用了蓝鸟诺言集成的异步库。我发现[this](https://www.npmjs.com/package/async-bluebird),但它似乎没有经过测试,所以我不想推荐它。但它可能会很好!你应该检查[npmjs](https://www.npmjs.com/search?q=async),看看是否有任何适合你需要的软件包。 – William

+0

谢谢威廉!我找到了一个更好的解决方案,看看我的编辑:) –