Il semble que vous exécutiez plus de code dans la version parallèle
// 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()
Pour la version parallèle, vous mettez l'appel de fonction (ContentRepo.geBySkillIdWithSourceFiltered
) à l'intérieur d'une boucle. C'est pourquoi il est plus lent.
Pour la question sur l'exécution des promesses en parallèle :
Comme Promise.all
, Promise.allSettled
attendre plusieurs promesses. Il ne se soucie pas de l'ordre dans lequel ils résolvent, ou si les calculs s'exécutent en parallèle. Les deux ne garantissent pas la concurrence ni l'inverse. Leur tâche consiste simplement à s'assurer que toutes les promesses qui lui sont transmises sont respectées.
Vous ne pouvez donc pas garantir manuellement le parallélisme d'exécution des promesses
Voici un article vraiment intéressant
expliquant le parallélisme et Promise.All
et comment l'API Nodejs du navigateur diffère de l'API Nodejs installée sur votre ordinateur en termes de parallélisme.
Voici l'extrait de la conclusion de l'article :
Remarque :
Il y a une différence subtile :
-
Promise.all :se résout uniquement lorsque toutes les promesses qui lui sont transmises sont résolues, sinon il sera rejeté avec la première erreur de promesse rejetée.
-
Promise.allSettled :sera toujours résolu avec un tableau contenant des informations sur les promesses résolues et rejetées.