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

282
Vistas
javascript: no se puede obtener respuesta de promise.all ()

Descubro que no puedo obtener la respuesta cuando promise.all .

Los orders a continuación deben ser una matriz.

 Promise.all(promises).then(function (orders) { console.log(orders); // nothing logged });

código completo

 let promises = markets.map(async (mkt) => { return new Promise(async function (resolve, reject) { return functionA(paramA) .then(resA => { return res.functionB() .then((resB) => { if (resB.length > 0) { return functionC() .then(resC => { console.log(resC); // successfully logged return resC; }); } }); }) .catch(err => console.log(err)); }); }); Promise.all(promises).then(function (orders) { console.log(orders); // nothing logged });

¿Cómo puedo arreglar?

Actualización 1
Actualizo el código basado en el comentario.
Los orders ahora están regresando.

 (54) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, Array(1), undefined, undefined, undefined, undefined, undefined, undefined, undefined, Array(1), undefined, Array(1), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

¿Cómo puedo hacer que la promesa regrese sin undefined ?

 const promises = markets.map(async mkt => { const resA = await functionA(paramA); const resB = await res.functionB(); if (resB.length > 0) { const resC = await functionC() console.log(resC); // successfully logged return resC; } }); Promise.all(promises).then(orders => { console.log(orders); // nothing logged }, err => { console.log(err); });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

  • El constructor Promise ignora cualquier valor devuelto por su devolución de llamada.
  • No estás llamando a resolve a ningún lado
  • No necesita construir una Promesa cuando está llamando a una función que ya le da una Promesa
 const promises = markets.map((mkt) => { return functionA(paramA) .then(resA => res.functionB()) .then((resB) => { if (resB.length > 0) { return functionC() .then(resC => { console.log(resC); // successfully logged return resC; }); } }) .catch(handleError); });

Un mejor enfoque sería utilizar await para hacer que el código sea plano y fácil de leer.

 const promises = markets.map(async (mkt) => { try { const resA = await functionA(paramA); const resB = await res.functionB(); if (resB.length > 0) { const resC = await functionC() return resC; } } catch (e) { // handle errors } });

También podría considerar el manejo de errores en Promise.all , no en el asignador.

Si desea incluir solo elementos para los que se llama a functionC , filtre los valores vacíos después.

 Promise.all(promises).then(function (orders) { const filtered = orders.filter(Boolean); console.log(filtered); });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Bueno, nunca resolve() o reject() las new Promise que estás creando. ¡Evite el antipatrón del constructor Promise y nunca pase una async function como ejecutora de la new Promise !

Este código se puede simplificar en gran medida mediante el uso consiguiente de async / await en lugar de .then() :

 const promises = markets.map(async mkt => { const resA = await functionA(paramA); const resB = await res.functionB(); if (resB.length > 0) { const resC = await functionC() console.log(resC); // successfully logged return resC; } }); Promise.all(promises).then(orders => { console.log(orders); // nothing logged }, err => { console.log(err); });
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