如何使用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 }) }) } })