Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

234
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!