我有一個擁有20000+個承諾的大集合,我想用Bluebird的Promise.map來解決它。但是,我的代碼不能成功執行,但在大約15-20分鐘後超時。Nodejs Bluebird Promise.map不適用於大集合
我得到的錯誤是超時錯誤。
當集合少於2000個承諾時,代碼將在不到10秒內成功執行。
請幫我找到Promise.map或其他任何方式的替代方法,以便代碼不超時。
service.getSomePromises().then(function(arrSomePromises){
var promises = [];
for (var i = 0;i < arrSomePromises.length; i++){
var getDetailsObject = _getDetails(_db, i);
promises.push(getDetailsObject);
}
//Below is the code that times out
return Promise.map(promises, function(doc){
return reportData.push(doc);
})
}
您可能會嘗試太多的併發連接,這可能會耗盡本地資源或壓倒目標。我建議在'Promise.map()'中使用'concurrency'選項。首先將它設置爲像10這樣的小東西,如果可以的話,然後試着提高它。 – jfriend00
此外,現在你已經添加了代碼,這是使用'Promise.map()'的錯誤方法。通常情況下,您會傳遞一組數據和一個函數,對該數據執行一些異步操作並返回一個承諾。你不會傳遞一系列的承諾。我們可以使用'Promise.all()'和一組promise。 – jfriend00
您顯示的代碼沒有任何意義,因爲'promise.length'爲'0',所以'for'循環將不會執行任何操作。 – jfriend00