Tuve un error con este código.
exports.getResults = (req, res) => { status = await miDealApi.getResults() res.json({ status: status }) }El problema fue que usé 'esperar' sin declarar el método como 'asincrónico', pero el error que Node.js me estaba dando no estaba claro y no me ayudó a resolverlo en absoluto.
internal/modules/cjs/loader.js:999 throw err; ^ [wrapSafe (internal/modules/cjs/loader.js:979:16),Module._compile (internal/modules/cjs/loader.js:1027:27),Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10),Module.load (internal/modules/cjs/loader.js:928:32),Function.Module._load (internal/modules/cjs/loader.js:769:14),Module.require (internal/modules/cjs/loader.js:952:19),require (internal/modules/cjs/helpers.js:88:18),Object.<anonymous> (C:\Users\user\Documents\DT\projects\suresort-manager\controllers\waveFactory.js:6:30),Module._compile (internal/modules/cjs/loader.js:1063:30),Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)] PS C:\Users\user\Documents\DT\projects\suresort-manager>¿Hay algo que pueda hacer para que errores como este sean más claros en el futuro?
Una posibilidad es que su versión de node.js sea un poco más antigua y, por lo tanto, no le dé el error adecuado.
Ejecutando con Node 12 obtengo:
/project/foo.js:2 status = await miDealApi.getResults() ^^^^^ SyntaxError: await is only valid in async function at wrapSafe (internal/modules/cjs/loader.js:915:16) at Module._compile (internal/modules/cjs/loader.js:963:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) at internal/main/run_main_module.js:17:47Entonces, ¿es posible que desee verificar su versión?
node -v 12.21.0Siempre debe intentar trabajar con al menos la versión estable.
Tenga en cuenta: await tiene que usarse con async .
Una función asíncrona es una función declarada con la palabra clave
async, y la palabra claveawaitestá permitida dentro de ellas. Las palabras claveasyncyawaitpermiten que el comportamiento asincrónico basado en promesas se escriba en un estilo más claro, lo que evita la necesidad de configurar explícitamente cadenas de promesas.
Cambie su código como a continuación:
exports.getResults = async (req, res) => { status = await miDealApi.getResults() res.json({ status: status }) }Feliz codificación :)