为什么Koa回调函数中的数据不能响应给前端?不使用await的话
问题描述
使用await可以,使用传统的回调为什么不行?
相关代码
Article.find({}).skip(skip).limit(sizes)
.exec((err, docs) => {
if(err) {
ctx.body = {
code: -1,
msg: err
}
}else {
ctx.body = {
code: 0,
data: docs
}
console.log(dos) //有数据,但是前端404
}
})
router.get('/getArticles', async (ctx) => {
let { sizes, pageNum } = ctx.query
sizes = Number(sizes)
pageNum = Number(pageNum)
const skip = (pageNum - 1) * sizes
const data = await Article.find({}).skip(skip).limit(sizes)
//这样可以拿到
ctx.body = {
code: 0,
data
}
})
你期待的结果是什么?实际看到的错误信息又是什么?
如果就是用回调,不用await该怎么改才正确?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为你的上一段代码是中回调是异步执行的,本身Article.find({}).skip(skip).limit(sizes).exec(...)这个这调用会一闪而过,koa2的中间件管道会瞬间执行完毕,给前端响应. 等你数据查询回来,回调被调用的时候,ctx已经无意义.