我有一个拥有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