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

141
Visualizações
await solo es válido en la función asíncrona

Escribí este código en lib/helper.js

 var myfunction = async function(x,y) { .... return [variableA, variableB] } exports.myfunction = myfunction;

y luego traté de usarlo en otro archivo

 var helper = require('./helper.js'); var start = function(a,b){ .... const result = await helper.myfunction('test','test'); } exports.start = start;

tengo un error

"esperar solo es válido en la función asíncrona"

¿Cual es el problema?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

El error no se refiere a myfunction sino a start .

 async function start() { .... const result = await helper.myfunction('test', 'test'); } 

 // My function const myfunction = async function(x, y) { return [ x, y, ]; } // Start function const start = async function(a, b) { const result = await myfunction('test', 'test'); console.log(result); } // Call start start();



Aprovecho la oportunidad de esta pregunta para informarle sobre un patrón anti conocido que usa await , que es: return await .


INCORRECTO

 async function myfunction() { console.log('Inside of myfunction'); } // Here we wait for the myfunction to finish // and then returns a promise that'll be waited for aswell // It's useless to wait the myfunction to finish before to return // we can simply returns a promise that will be resolved later // useless async here async function start() { // useless await here return await myfunction(); } // Call start (async() => { console.log('before start'); await start(); console.log('after start'); })();


CORRECTO

 async function myfunction() { console.log('Inside of myfunction'); } // Here we wait for the myfunction to finish // and then returns a promise that'll be waited for aswell // It's useless to wait the myfunction to finish before to return // we can simply returns a promise that will be resolved later // Also point that we don't use async keyword on the function because // we can simply returns the promise returned by myfunction function start() { return myfunction(); } // Call start (async() => { console.log('before start'); await start(); console.log('after start'); })();


Además, sepa que hay un caso especial en el que la return await es correcta e importante: (usando try/catch)

¿Hay problemas de rendimiento con `return await`?

over 4 years ago · Santiago Trujillo Relatório

0

Para usar await , su contexto de ejecución debe ser de naturaleza async

Como dijo, debe definir la naturaleza de su executing context en el que está dispuesto a await una tarea antes que nada.

Simplemente coloque async antes de la declaración fn en la que se ejecutará su tarea async .

 var start = async function(a, b) { // Your async task will execute with await await foo() console.log('I will execute after foo get either resolved/rejected') }

Explicación:

En su pregunta, está importando un method que es de naturaleza asynchronous y se ejecutará en paralelo. Pero donde intenta ejecutar ese método async es dentro de un execution context diferente que necesita definir async para usar await .

 var helper = require('./helper.js'); var start = async function(a,b){ .... const result = await helper.myfunction('test','test'); } exports.start = start;

Preguntándose qué está pasando debajo del capó

await consume métodos/funciones de promesa/futuro/devolución de tareas y async marca un método/función como capaz de usar await.

Además, si está familiarizado con las promises , await en realidad está haciendo el mismo proceso de promesa/resolución. Crea una cadena de promesa y ejecuta su próxima tarea en la devolución de llamada de resolve .

Para obtener más información, puede consultar MDN DOCS .

over 4 years ago · Santiago Trujillo Relatório

0

Cuando recibí este error, resultó que tenía una llamada a la función de mapa dentro de mi función "asincrónica", por lo que este mensaje de error en realidad se refería a que la función de mapa no estaba marcada como "asincrónica". Solucioné este problema sacando la llamada "esperar" de la función de mapa y buscando otra forma de obtener el comportamiento esperado.

 var myfunction = async function(x,y) { .... someArray.map(someVariable => { // <- This was the function giving the error return await someFunction(someVariable); }); }
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