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

340
Visualizações
Async/Await dentro de Array#map()

Recibo un error de tiempo de compilación con este código:

 const someFunction = async (myArray) => { return myArray.map(myValue => { return { id: "my_id", myValue: await service.getByValue(myValue); } }); };

El mensaje de error es:

esperar es una palabra reservada

¿Por qué no puedo usarlo así?

También probé de otra manera, pero me da el mismo error:

 const someFunction = async (myArray) => { return myArray.map(myValue => { const myNewValue = await service.getByValue(myValue); return { id: "my_id", myValue: myNewValue } }); };
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

No puede hacer esto como imagina, porque no puede usar await si no está directamente dentro de una función async .

Lo más sensato sería hacer que la función pasada al map sea asíncrona. Esto significa que el map devolvería una serie de promesas. Luego podemos usar Promise.all para obtener el resultado cuando regresen todas las promesas. Como Promise.all devuelve una promesa, la función externa no necesita ser async .

 const someFunction = (myArray) => { const promises = myArray.map(async (myValue) => { return { id: "my_id", myValue: await service.getByValue(myValue) } }); return Promise.all(promises); }
over 4 years ago · Santiago Trujillo Relatório

0

Si desea ejecutar map con una función de mapeo asíncrono, puede usar el siguiente código:

 const resultArray = await Promise.all(inputArray.map(async (i) => someAsyncFunction(i)));

Cómo funciona:

  • inputArray.map(async ...) devuelve una matriz de promesas, una para cada valor en inputArray .
  • Poner Promise.all() alrededor de la matriz de promesas lo convierte en una sola promesa.
  • La promesa única de Promise.all() devuelve una matriz de valores: cada promesa individual se resuelve en un valor.
  • Ponemos await delante de Promise.all() para esperar a que la promesa combinada se resuelva y almacene la matriz de subpromesas resueltas en la variable resultArray .

Al final, obtenemos un valor de salida en resultArray para cada elemento en inputArray , mapeado a través de la función someAsyncFunction . Tenemos que esperar a que se resuelvan todas las funciones asíncronas antes de que el resultado esté disponible.

over 4 years ago · Santiago Trujillo Relatório

0

Esto se debe a que la función en el map no es asíncrona , por lo que no puede esperar en su declaración de devolución. Se compila con esta modificación:

 const someFunction = async (myArray) => { return myArray.map(async (myValue) => { // <-- note the `async` on this line return { id: "my_id", myValue: await service.getByValue(myValue) } }); };

Pruébelo en Babel REPL

Entonces… no es posible dar una recomendación sin ver el resto de su aplicación, pero dependiendo de lo que esté tratando de hacer, haga que la función interna sea asíncrona o intente crear una arquitectura diferente para este bloque.

Actualización: es posible que obtengamos una espera de nivel superior algún día: https://github.com/MylesBorins/proposal-top-level-await

over 4 years ago · Santiago Trujillo 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