如何使用asynchronous/等待承诺答复?

我使用Koa2框架与Nodejs 7和本地asynchronous/等待function。 我试图在promiseparsing后为结果呈现模板( 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(...)等待,一个应用程序将工作,但不会等待项目。

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

现在这个代码正在为我工​​作:

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