私は約束事の配列を含んでおり、各内側配列は4k、2k、または500の約束を持つことができます。一連の約束事を連続して実行します。 Promise.allが完了したら、次のバッチに移動します
約60k約束があり、他の値でもテストすることができます。
今、私はPromise.all(BigArray [0])を実行する必要があります。
最初の内部配列が完了したら、次のPromise.all(BigArray [1])などを実行する必要があります。
私が実行しようとした場合Promise.all(BigArray)その投げ:
致命的なエラーcall_and_retry_2割当てに失敗しました - プロセスのメモリ のうち、私はシリーズの約束のそれぞれではなく、並行して、それを実行する必要があるIそれがNodeがやっていることだと思います。私は新しいlibを使用するべきではありませんが、答えを検討してください!
編集:ここでは
は、コードの例の一部です:
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;
})
}
この前の質問を投稿したのは、関連するコンテキストを含む同じユーザーですか:[Promise.allを連続して実行](http://stackoverflow.com/questions/37196699/execute-promise-all-in-series/37196780#コメント61956748_37196780)? – jfriend00
すべての60k操作が並行して実行されても問題ありませんが、結果をシリアルに処理する(1つのサブ配列を一度に処理したい)だけですか?または、実際には、各サブアレイが直列に実行され、直列に処理されることを表す操作が必要ですか?後者は、node.jsのメモリとリソースの観点からはるかに安全です。 – jfriend00
はい私はそうです。私はそれらを連続して走らせる必要がある。 innerArrayだけが並行して動作することを約束してOKです。 innerArray 1が完了したら、innerArray 2の次の500-4kの約束事に進み、それらを並行して実行します。innnerArray 500-4kの約束が完了するとinnerArray 3に移動し、500-4kを実行します。 innerArray 4を実行し、それらを500〜4kで実行してください...など – user1554966