sql >> Base de Datos >  >> NoSQL >> MongoDB

Consultando el mismo documento en paralelo en la misma API en mongoDB

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:

  1. Promise.all:se resuelve solo cuando se resuelven todas las promesas pasadas; de lo contrario, se rechazará con el primer error de promesa rechazada.

  2. Promise.allSettled:siempre se resolverá con una matriz con información sobre promesas resueltas y rechazadas.