将Express应用程序从promises转换为async / await

时间:2017-04-07 00:32:28

标签: javascript express es6-promise

我已经使用Promise很长一段时间了,我总是不喜欢看起来很笨重的代码。因此,我喜欢async / await(理论上)。

但是,您只能在异步函数中使用await。如果我当前将每个路由作为一个函数(ex export function createLike(req, res, next)),那么该路由可以是async function吗?如果我这样做,有什么我需要检查的吗?或者如果我这样做会发生奇怪的事情吗?我可以将函数保持为正常函数,其中调用async function就像这样(如果是这样的话):

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')
    }
}

2 个答案:

答案 0 :(得分:1)

export async function createLike(req, res, next) {

易peasy。将函数声明为异步只不过是让它返回Promise。

揭开你整个琐碎的榜样:

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')
}

这将等到获得someAsyncMethod()响应,然后在发送响应之前提取内容。

答案 1 :(得分:0)

使用koa 2+。它是为async/await内容而构建的。