Parece que está ejecutando más código en la versión 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 la versión paralela, está poniendo la llamada de función (ContentRepo.geBySkillIdWithSourceFiltered
) dentro de un bucle. Por eso es más lento.
Para la pregunta sobre ejecutar promesas en paralelo:
Me gusta Promise.all
, Promise.allSettled
esperar múltiples promesas. No le importa en qué orden se resuelven o si los cálculos se ejecutan en paralelo. Ambos no garantizan la concurrencia ni lo contrario. Su tarea es simplemente garantizar que se manejen todas las promesas que se le pasan.
Por lo tanto, no puede garantizar manualmente el paralelismo de la ejecución de la promesa
Aquí hay un artículo realmente interesante
explicando el paralelismo y Promise.All
y cómo la API de Nodejs del navegador difiere de la API de Nodejs instalada en su computadora en términos de paralelismo.
Aquí está el extracto de la conclusión del artículo:
Nota al margen:
Hay una sutil diferencia:
-
Promise.all:se resuelve solo cuando se resuelven todas las promesas pasadas; de lo contrario, se rechazará con el primer error de promesa rechazada.
-
Promise.allSettled:siempre se resolverá con una matriz con información sobre promesas resueltas y rechazadas.