1

我正在使用带有本机异步/等待功能的Koa2框架。Nodejs 7我正在尝试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

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

4

2 回答 2

4

await用于等待承诺被解决,因此您可以将代码重写为:

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 }) 
    })
   }
})
于 2017-05-25T14:33:51.113 回答
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 }) 
    })
  }
})
于 2017-05-26T11:50:51.107 回答