为什么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该怎么改才正确?

阅读 2.1k
1 个回答

因为你的上一段代码是中回调是异步执行的,本身Article.find({}).skip(skip).limit(sizes).exec(...)这个这调用会一闪而过,koa2的中间件管道会瞬间执行完毕,给前端响应. 等你数据查询回来,回调被调用的时候,ctx已经无意义.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题