Estoy trabajando en una API de NestJS que recibe algunos códigos de artículos y los guarda en una base de datos con estado como queue y luego quiero crear un proceso en segundo plano que busque artículos con estado de queue y obtenga un sitio web con ese código y complete la información sobre ese ID de artículo.
Quiero que obtenga códigos en 5 rutinas paralelas, cada una debe obtener un nuevo código de la lista tan pronto como termine de obtener el código actual.
La forma en que está construido en este momento, obtiene 5 códigos y usa Promise.all pero lo que no me gusta de este enfoque es que si uno de los espera es significativamente más lento que el otro, todos van por el más lento.
const promiseResult = await Promise.all(promiseList);¿Qué enfoque es el mejor para mí para aprender a fin de lograr lo que estoy planeando hacer?
Básicamente haces tu trabajo cuando se cumplen todas las promesas. Tienes razón cuando dices que esperas al más lento, ya que esto es exactamente lo await Promise.all(promiseList) .
Ahora debe preguntarse si puede procesar las promesas más rápidas mientras espera la más lenta. Si es así, puede iterar sus promesas y definir un .then() para ellas:
for (let promise of promiseList) { promise.then((value) => { //Do something }); } De esta manera, todas sus promesas tienen un controlador then para el caso en que se cumple la promesa y su Javascript fluye normalmente, sin esperar ninguna de las promesas. Una vez que se cumple cada promesa, el bucle de eventos detectará que ocurrió un evento y llamará a su función de devolución de llamada (en el caso del ejemplo anterior then la función de flecha dentro de la llamada).
Tenga en cuenta then la devolución de llamada nunca debe suponer que las otras promesas también se completaron, pero eso no debería ser un problema en su caso, porque desea trabajar cuando su lista de promesas también se completó parcialmente.