我有一个包含promise数组的数组,每个inner数组可以有4k,2k或500个promise。执行Promise.all系列
总共有约60K的承诺,我也可以用其他值来测试它。
现在我需要执行Promise.all(BigArray[0])
。
一旦第一个内部数组完成,我需要执行下一个Promise.all(BigArray[1])
等等。
如果我尝试执行Promise.all(BigArray)
其投掷:
致命错误call_and_retry_2分配失败 - 加工出来的内存
我需要并行执行它的每个承诺串联,不我认为这就是它在做什么Node。 我不应该使用新的库,但是我愿意考虑答案!
编辑:
下面是一个例子的代码:
function getInfoForEveryInnerArgument(InnerArray) {
const CPTPromises = _.map(InnerArray, (argument) => getDBInfo(argument));
return Promise.all(CPTPromises)
.then((results) => {
return doSomethingWithResults(results);
});
}
function mainFunction() {
BigArray = [[argument1, argument2, argument3, argument4], [argument5, argument6, argument7, argument8], ....];
//the summ of all arguments is over 60k...
const promiseArrayCombination = _.map(BigArray, (InnerArray, key) => getInfoForEveryInnerArgument(InnerArray));
Promise.all(promiseArrayCombination).then((fullResults) => {
console.log(fullResults);
return fullResults;
})
}
答案试图跟踪的60K承诺的状态听起来像是一场噩梦,我不是你运行内存惊讶。听起来像你需要进一步打破你的问题,或重新考虑架构。 –
我同意@MikeMcCaughan。 60k承诺听起来不合理,可能有更好的解决方案来解决您的问题。 – nils
这并没有太大的意义。如果你有一大串承诺数组,那意味着你的操作已经全部启动了。所以,这里没有一系列的执行。它们已经在并行执行。如果您只是想知道所有承诺何时完成,请说出来,因为这听起来像是真正的问题。现在,在node.js中同时启动60k异步操作几乎没有意义,所以这可能是您真正的问题。我认为你需要备份并向我们展示创建60k承诺的代码。这就是问题所在。 – jfriend00