为什么Koa回调函数中的数据不能响应给前端?不使用await的话

发布于 2022-09-11 16:30:40 字数 881 浏览 10 评论 0

问题描述

使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青丝拂面 2022-09-18 16:30:40

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文