我想解决一个承诺,然后在Koa 2中渲染一个类似的视图 .
async function render(ctx, next) {
// wait for some async action to finish
await new Promise((resolve) => {
setTimeout(resolve, 5000)
})
// then, send response
ctx.type = 'text/html'
ctx.body = 'some response'
await next()
}
但是,当我这样做时,服务器不发送任何响应(浏览器一直等待响应,并超时) . 我究竟做错了什么?
3 回答
我意识到我在这里已经晚了几个月了,但我刚才偶然发现同样的问题并发现为了让给定的中间件能够等待异步执行,所有前面的中间件都必须
await next()
,而不是到next()
. 确保事后证实这一点似乎很明显 .我希望这有帮助 .
所以,我拿了你的代码并创建了一个小应用程序:
这种方式开箱即用......无需进行任何更改 . 所以看来,你的
render
函数的方式在某种程度上是不正确的 .我编写中间件的方式与@Sebastian非常相似:
希望它能帮助你