Si encuentras algún fallo en tu código o proyecto, recuerda probar siempre en un entorno de testing antes subir el código al trabajo final.
Solución:
Puede ser que no encontraste resultados porque async/await
es un ES7 no es una característica de ES6, está disponible en el nodo >= 7.6.
Su código funcionará en node. He probado el siguiente código
var express = require('express');
var app = express();
async function wait (ms)
return new Promise((resolve, reject) =>
setTimeout(resolve, ms)
);
app.get('/', async function(req, res)
console.log('before wait', new Date());
await wait(5 * 1000);
console.log('after wait', new Date())
res.send('hello world');
);
app.listen(3000, err => console.log(err ? "Error listening" : "Listening"))
Y voilá
MacJamal:messialltimegoals dev$ node test.js
Listening undefined
before wait 2017-06-28T22:32:34.829Z
after wait 2017-06-28T22:32:39.852Z
^C
Básicamente lo tienes, tienes que async
una función para await
en una promesa dentro de su código. Esto no es compatible con el nodo LTS v6, por lo que se puede usar babel para transpilar el código. Espero que esto ayude.
Creo que no puede hacerlo directamente porque las excepciones no se detectan y la función no regresará si se lanza una. Este artículo explica cómo crear una función contenedora para que funcione: http://thecodebarbarian.com/using-async-await-with-mocha-express-and-mongoose.html
No lo he probado, pero estuve investigando esto recientemente.
De alguna manera funciona, pero no realmente
Si bien parece funcionar, deja de manejar los errores generados dentro de la función asíncrona y, como resultado, si no se maneja un error, el servidor nunca responde y el cliente sigue esperando hasta que se agota el tiempo de espera.
El comportamiento correcto debe ser responder con un 500 código de estado.
Soluciones
express-promise-router
const router = require('express-promise-router')();
// Use it like a normal router, it will handle async functions
express-asyncify
const asyncify = require('express-asyncify')
Para fijar rutas establecidas en el app
objeto
Reemplazar var app = express();
con
var app = asyncify(express());
Para arreglar rutas establecidas en router
objetos
Reemplazar var router = express.Router();
con
var router = asyncify(express.Router());
Nota
Solo tienes que aplicar el asyncify
función en los objetos donde establece las rutas directamente
https://www.npmjs.com/package/express-asyncify
Si haces scroll puedes encontrar los comentarios de otros desarrolladores, tú además puedes mostrar el tuyo si dominas el tema.