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

144
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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