我有一個包含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