• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

88
Vistas
Promise.then antes de resolver

Tengo una serie de objetos que necesitan datos de una llamada API.

El punto final de API es diferente para cada objeto.

Estoy iterando la matriz de objetos y creando una promesa para cada uno.

Luego estoy usando Promise.all pasando una serie de promesas.

Una vez que se han resuelto las promesas, necesito actualizar la matriz original de objetos con sus respectivos datos. Para evitar iterar la matriz de objetos dos veces, estoy asignando (a falta de una palabra mejor) el resultado de entonces en la Promesa antes de que se resuelva.

Funciona, pero ¿hay algún problema con este enfoque?

 updateData = async (objects) => { const promises = []; objects.forEach(object => { if (object.data === undefined) { const service = this.serviceFactory.getService(object.serviceKey); promises.push(service[object.serviceFunc](object.id).then(data => object.data = data)); } }); await Promise.all(promises); };
almost 3 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No, todo está bien, pero lo animo a usar async/await para la implementación completa. Algo como esto:

 const processObject = async (object) => { if (object.data === undefined) { const service = this.serviceFactory.getService(object.serviceKey); const data = await service[object.serviceFunc](object.id); object.data = data } return object; } updateData = async (objects) => { const promises = objects.map(processObject); const processedObjects = await Promise.all(promises); };
almost 3 years ago · Juan Pablo Isaza Denunciar

0

Funciona, pero ¿hay algún problema con este enfoque?

El código que se muestra en sí está bien, si esto podría tener una trampa depende más del lado de la llamada (cómo maneja los datos de updateData y si está claro que los objetos pasados a la función se actualizan).

Con respecto al código en sí: probablemente usaría un map en su lugar para cada uno, lo await forEach de esa devolución de llamada, y lo hace un poco menos propenso a errores con respecto a romper accidentalmente la cadena Promise dentro de la devolución de llamada.

 updateData = async(objects) => { const promises = objects.map(async (object) => { if (object.data === undefined) { const service = this.serviceFactory.getService(object.serviceKey); object.data = await service[object.serviceFunc](object.id); } }); await Promise.all(promises); };

En el caso de que object.data === undefined sea falso, el valor devuelto es undefined , pero eso no es un problema.

almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda