並列バージョンでより多くのコードを実行しているようです
// The normal version
let normal = await ContentRepo.geBySkillIdWithSourceFiltered(
[chosenSkillsArr[0].sid!],
readContentIds,
body.isVideoIncluded,
true,
true
);
// The code inside the parallel version:
chosenSkillsArr.map(async (skill: IScrapeSkillDocument) => {
const result = await ContentRepo.geBySkillIdWithSourceFiltered(
[skill.sid!],
readContentIds,
body.isVideoIncluded,
true,
true
);
})
[chosenSkillsArr[0].sid!], vs chosenSkillsArr.map()
並列バージョンの場合、関数呼び出し(ContentRepo.geBySkillIdWithSourceFiltered
)ループ内。だから遅いです。
Promiseを並行して実行することに関する質問:
Promise.all
のように 、Promise.allSettled
複数の約束を待ちます。それらがどの順序で解決するか、または計算が並行して実行されているかどうかは関係ありません。どちらも並行性を保証するものでも、その逆も保証するものではありません。彼らの仕事は、渡されたすべての約束が確実に処理されるようにすることです。
したがって、promise実行の並列性を手動で保証することはできません
これは本当にPromise.All
の説明 また、ブラウザのNodejs APIが、並列処理の点でコンピュータにインストールされているNodejsAPIとどのように異なるか。
記事の結論の抜粋は次のとおりです。
サイドノート:
微妙な違いが1つあります:
-
Promise.all:渡されたすべてのpromiseが解決された場合にのみ解決されます。それ以外の場合は、最初に拒否されたpromiseエラーで拒否されます。
-
Promise.allSettled:解決された約束と拒否された約束に関する情報を含む配列で常に解決されます。