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


aluckdog
浏览 914回答 1
1回答

www说

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

相关分类

Java