He estado usando Promises durante mucho tiempo y siempre me ha disgustado el aspecto voluminoso del código escrito. Entonces tiene sentido que me encante async/await (en teoría).
Sin embargo, solo puede usar await dentro de una función asíncrona. Si actualmente tengo cada ruta como una función (por ejemplo export function createLike(req, res, next) ), ¿puede esa ruta ser una async function ? ¿Hay algo que deba verificar si hago eso? ¿O suceden cosas extrañas si hago eso? Podría mantener la función como una función normal con una async function llamada así (si ese es el caso):
export function createLike(req, res, next) { doStuff() // does this need to be "await doStuff()" if it's the only actionable call in the parent function? async function doStuff() { // do asynchronous stuff via async/await res.status(200).send('success') } }export async function createLike(req, res, next) {Pan comido. Declarar una función como asíncrona hace poco más que hacer que devuelva una Promesa.
Desentrañando todo tu ejemplo trivial:
export async function createLike(req, res, next) { // Don't bother putting inside a 'doStuff' if it's all you have. // Get straight to the asyncing const { something } = await someAsyncMethod(); const { foo } = await fetch(`/get/this/${something}`).then((r) => r.json()); console.log(foo); res.status(200).send('success') } Esto esperará hasta que obtenga la respuesta de someAsyncMethod() s, luego obtendrá algo antes de enviar la respuesta.
Usa koa 2+. Está diseñado para cosas async/await .