如何使用async / await和promise响应?

时间:2017-05-25 14:14:17

标签: node.js async-await koa koa2

我正在使用Koa2框架和Nodejs 7以及本机异步/等待函数。而且我正在尝试在promise解析后为结果渲染模板(koa-art-template模块)。

const app = new koa()
const searcher = require('./src/searcher')

app.use(async (ctx) => {
  const params = ctx.request.query

  if (ctx.request.path === '/') {
    searcher.find(params).then((items) => {
      await ctx.render('main', { items }) 
    })
  }
})

我想等待searcher模块获取项目,但Koa给我错误

  await ctx.render('main', { items })
        ^^^
SyntaxError: Unexpected identifier

如果我要设置等待searcher.find(params).then(...),应用程序将起作用,但不会等待项目。

2 个答案:

答案 0 :(得分:4)

await用于等待promises得到解决,因此您可以将代码重写为:

app.use(async (ctx) => {
  const params = ctx.request.query

  if (ctx.request.path === '/') {
    let items = await searcher.find(params); // no `.then` here!
    await ctx.render('main', { items });
  }
})

如果searcher.find()没有返回真正的承诺,您可以尝试这样做:

app.use(async (ctx) => {
  const params = ctx.request.query

  if (ctx.request.path === '/') {
    searcher.find(params).then(async items => {
      await ctx.render('main', { items }) 
    })
   }
})

答案 1 :(得分:0)

此代码现在适用于我:

const app = new koa()
const searcher = require('./src/searcher')

app.use(async (ctx) => {
  const params = ctx.request.query

  if (ctx.request.path === '/') {
    searcher.find(params).then((items) => {
      await ctx.render('main', { items }) 
    })
  }
})