Det ser ud til, at du kører mere kode i den parallelle version
// 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()
For den parallelle version sætter du funktionskaldet (ContentRepo.geBySkillIdWithSourceFiltered
) inde i en løkke. Derfor er det langsommere.
For spørgsmålet om at køre løfter parallelt:
Ligesom Promise.all
, Promise.allSettled
afvente flere løfter. Den er ligeglad med, hvilken rækkefølge de løser, eller om beregningerne kører parallelt. Begge garanterer ikke samtidighed eller det modsatte. Deres opgave er blot at sikre, at alle de løfter, der gives til den, bliver håndteret.
Så du kan ikke manuelt garantere paralleliteten af løfteudførelse
Her er en virkelig interessant artikel
forklarer parallelisme og Promise.All
og hvordan browser Nodejs API adskiller sig fra Nodejs API installeret på din computer med hensyn til parallelitet.
Her er uddraget af artiklens konklusion:
Sidebemærkning:
Der er en subtil forskel:
-
Promise.all:Løser kun, når alle løfter, der er givet til det, løser sig, ellers vil det afvise med den første afviste løftefejl.
-
Promise.allSettled:Vil altid blive løst med et array med information om løste og afviste løfter.