Parece que você está executando mais código na versão paralela
// 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()
Para a versão paralela, você está colocando a chamada de função (
ContentRepo.geBySkillIdWithSourceFiltered
) dentro de um loop. Por isso é mais lento. Para a pergunta sobre a execução de promessas em paralelo:
Como
Promise.all
, Promise.allSettled
esperar várias promessas. Ele não se importa com a ordem que eles resolvem ou se os cálculos estão sendo executados em paralelo. Ambos não garantem a simultaneidade nem o contrário. Sua tarefa é apenas garantir que todas as promessas que lhe são passadas sejam tratadas. Portanto, você não pode garantir manualmente o paralelismo da execução da promessa
Aqui está um artigo interessante explicando paralelismo e
Promise.All
e como a API do Nodejs do navegador difere da API do Nodejs instalada em seu computador em termos de paralelismo. Aqui está o extrato da conclusão do artigo:
Observação:
Há uma diferença sutil:
-
Promise.all:Resolve somente quando todas as promessas passadas para ele são resolvidas, caso contrário, ele será rejeitado com o primeiro erro de promessa rejeitada.
-
Promise.allSettled:Sempre será resolvido com um array com informações sobre promessas resolvidas e rejeitadas.