Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

235
Visualizações
Cómo resolver promesas anidadas con Promise.all()

Estoy tratando de escribir algo como esto pero no puedo resolver las promesas internas.

 const traceSamplesRequests = transactionTypes.map(async (transactionType) => { // This part should be synchronous since we need transactionNames const transactionNames = await api.getTransactionNames(); return transactionNames.map((transactionName) => api.getTraceSamples()); });

Y quiero escribir con funciones lambda con Promise.all bucles no imperativos.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Por lo tanto, .map() no tiene en cuenta las promesas. Llama a la devolución de llamada y simplemente recopila diligentemente el valor de retorno de la devolución de llamada y avanza a la siguiente iteración del ciclo. Dado que su devolución de llamada es async con una await en ella, ese valor de retorno es una promesa no resuelta. Entonces, lo que obtienes de .map() es una serie de promesas.

Por lo tanto, no hay forma de usar .map() o cualquiera de los métodos de iteración de matrices sin usar algo para esperar las promesas.

Parece que ya lo sabe, pero con el código que tiene, insertaría dos Promise.all() :

 const traceSamplesRequests = await Promise.all(transactionTypes.map(async (transactionType) => { // This part should be synchronous since we need transactionNames const transactionNames = await api.getTransactionNames(); return Promise.all(transactionNames.map((transactionName) => api.getTraceSamples())); }));

Eso le daría una matriz de valores (y la función principal tendría que ser async ). Esto ejecutará todas las operaciones asincrónicas en el ciclo en paralelo (todas en vuelo al mismo tiempo).

Sus otras opciones son usar un ciclo for o while que suspenderá la iteración del ciclo para cada await y ejecutará sus operaciones asincrónicas en secuencia (la segunda iteración del ciclo no se ejecuta hasta que se completa la primera).

O bien, puede escribir algún tipo de función de ayuda que sería una versión consciente de la promesa de .map() . Sin embargo, probablemente usaría for o .map() con Promise.all() dentro de la función auxiliar.

La biblioteca de promesa Async tiene múltiples funciones auxiliares como opciones para usar. Están diseñados para funcionar con promesas o devoluciones de llamada simples.

about 4 years ago · Juan Pablo Isaza Relatório

0

De hecho, lo hice funcionar así:

 const traceSamplesRequests = await Promise.all( transactionTypes.map(async (transactionType) => { const transactionNames = await api.getTransactionNames({ transactionType }); return await Promise.all(transactionNames.map((transactionName) => api.getTraceSamples({ transactionType }))); }) );
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda