2015-09-04 37 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

謝謝威廉!我找到了一個更好的解決方案,看看我的編輯:) –