【发布时间】:2016-09-08 20:46:13
【问题描述】:
我有一个包含 promise 数组的数组,每个内部数组可以有 4k、2k 或 500 个 promise。
总共有大约 60k 个 promise,我也可以使用其他值对其进行测试。
现在我需要执行Promise.all(BigArray[0])。
一旦第一个内部数组完成,我需要执行下一个Promise.all(BigArray[1])等等。
如果我尝试执行 Promise.all(BigArray) 它的投掷:
致命错误 call_and_retry_2 分配失败 - 进程内存不足
我需要按顺序执行每个 Promise,而不是并行执行,我认为这就是 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 promises 的状态听起来像是一场噩梦,我并不奇怪你的内存不足。听起来您需要进一步分解问题,或重新考虑架构。
-
我同意@MikeMcCaughan。 60k Promises 听起来不合理,您的问题可能有更好的解决方案。
-
这没有多大意义。如果你有一大堆 Promise,那意味着你的操作已经全部启动了。所以,这里没有连续执行。它们已经在并行执行。如果您只想知道所有承诺何时完成,那么请说出来,因为这听起来像是真正的问题。现在,在 node.js 中同时启动 60k 异步操作没有什么意义,所以这可能是你真正的问题。我认为您需要备份并向我们展示创建 60k 承诺的代码。这就是问题所在。
-
投票结束为 "unclear what you're ask" 因为你不能序列化 60k 承诺,因为如果你已经承诺60k 异步操作,那么它们已经在并行运行,你不能序列化已经并行运行的东西。
-
很清楚他在问什么;他想要一种方式来实现他的承诺,而不是并行,比如
Promise.all ()。
标签: javascript node.js promise