Sembra che tu stia eseguendo più codice nella versione parallela
// 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()
Per la versione parallela, stai effettuando la chiamata alla funzione (ContentRepo.geBySkillIdWithSourceFiltered
) all'interno di un ciclo. Ecco perché è più lento.
Per la domanda sull'esecuzione delle promesse in parallelo:
Come Promise.all
, Promise.allSettled
attendere più promesse. Non importa quale ordine risolvono o se i calcoli vengono eseguiti in parallelo. Entrambi non garantiscono la concorrenza né il contrario. Il loro compito è solo quello di garantire che tutte le promesse fattegli vengano mantenute.
Quindi non puoi garantire manualmente il parallelismo dell'esecuzione della promessa
Ecco un articolo interessante
spiegando il parallelismo e Promise.All
e in che modo l'API Nodejs del browser differisce dall'API Nodejs installata sul tuo computer in termini di parallelismo.
Ecco l'estratto della conclusione dell'articolo:
Nota a margine:
C'è una sottile differenza:
-
Promise.all:si risolve solo quando tutte le promesse passate vengono risolte, altrimenti verrà rifiutata con il primo errore di promessa rifiutata.
-
Promise.allSettled:verrà sempre risolto con un array contenente informazioni sulle promesse risolte e rifiutate.