Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

264
Vistas
¿Cómo proporcionar metadatos sobre las promesas al llamar a Promise.all()?

Estoy trabajando en un código Javascript que se ve así:

 const arrayOfPromises = getArrayOfPromises(); Promise.all(arrayOfPromises).then(array => doStuff(array));

Necesito cambiar getArrayOfPromises() para devolver información sobre cada promesa; para simplificar, digamos que es un indicador simple de verdadero/falso para cada una. Mi primer instinto fue refactorizar esta función para devolver una matriz de objetos, por ejemplo:

 const getArrayOfObjects = () => { ... return [ { promise: promise1, flag: flag1 }, { promise: promise2, flag: flag2 }, ... { promise: promisen, flag: flagn } ]; }

Sin embargo, lo anterior no funcionaría con Promise.all porque solo funciona directamente con una iteración de objetos Promise sin los objetos envolventes en el medio.

¿Cuál es la forma más sencilla de proporcionar dichos metadatos para cada una de las promesas y luego trabajar con ellos una vez que se hayan resuelto todas las promesas?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si desea utilizar estos metadatos una vez que se hayan resuelto las promesas y no tiene ningún control sobre los valores que están siendo resueltos por las promesas devueltas por getArrayOfPromises() , simplemente puede llamar a then() en cada promesa por separado en la matriz y hacer que devuelva el valor original combinado con sus metadatos. Aunque asegúrese de reemplazar la promesa original con la promesa devuelta por .then() . Array.prototype.map() lo hace fácil:

 arrayOfPromises = arrayOfPromises.map(promise => promise.then(value => ({ value, flag: true })));

Ejemplo:

 let arrayOfPromises = getArrayOfPromises(); arrayOfPromises = arrayOfPromises.map(promise => promise.then(value => ({ value, flag: true }))); Promise.all(arrayOfPromises).then(array => doStuff(array)); function getArrayOfPromises() { return [sleep(1000), sleep(1500), sleep(2000)]; } function doStuff(array) { console.log(array); } function sleep(ms) { return new Promise(resolve => setTimeout(() => resolve('resolved after ' + ms), ms)); }

Si tiene control sobre lo que devuelve getArrayOfPromises() , simplemente devuelva los metadatos como parte del valor que se está resolviendo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Cuál es la forma más sencilla de proporcionar dichos metadatos para cada una de las promesas y luego trabajar con ellos una vez que se hayan resuelto todas las promesas?

Simplemente coloque los datos en cada valor de resultado. No se trata de metadatos sobre la promesa, sino sobre el valor (?), y no necesita trabajar con ellos hasta que se resuelvan todas las promesas, por lo que los resultados son el lugar perfecto. Las banderas simplemente se convierten en contenido de la array en la que Promise.all(…) .

about 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda