Изглежда, че изпълнявате повече код в паралелната версия
// 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.all
, Promise.allSettled
очаквайте множество обещания. Не се интересува какъв ред разрешават или дали изчисленията се изпълняват паралелно. И двете не гарантират едновременност, нито обратното. Тяхната задача е просто да гарантират, че всички обещания, предадени на него, се обработват.
Така че не можете ръчно да гарантирате паралелността на изпълнението на обещанието
Ето една наистина интересна статия
обясняващ паралелизма и Promise.All
и как браузърът Nodejs API се различава от Nodejs API, инсталиран на вашия компютър по отношение на паралелизма.
Ето извадка от заключението на статията:
Странична бележка:
Има една фина разлика:
-
Promise.all:Разрешава се само когато всички обещания, предадени на него, се разрешават, в противен случай той ще отхвърли с първата грешка на отхвърленото обещание.
-
Promise.allSettled:Винаги ще се разрешава с масив с информация за разрешени и отхвърлени обещания.