【问题标题】:Mongoose multiple queries return after second queryMongoose 多个查询在第二次查询后返回
【发布时间】:2021-02-16 09:56:42
【问题描述】:

我正在尝试取回包含用户名和 url 属性的“图像”,但似乎第一个查询首先返回。为我的菜鸟知识道歉。

exports.getImg = (req, res) => {
    Image.find({}, '-__v').lean().exec((err, images) => {
        if (err) {
            res.sendStatus(400)({ 'msg': 'Something went wrong' });
        }
        
        for (let i = 0; i < images.length; i++) {
           //trying to get 
            User.findOne({ _id: images[i].id}, (err, user) => {
                images[i]['username'] = user.uname;
                images[i]['url'] = req.protocol + '://' + req.get('host') + '/images/' + images[i]._id;
            });
        }
        // console.log(images);
        // res.json(images);
    })
}

【问题讨论】:

    标签: node.js json mongodb mongoose nosql


    【解决方案1】:

    这是由于 .find() 函数是异步的。因为您正在循环并且还在循环中使用 .find() 所以它不会给出想要的结果。你需要使用 async/await。

    exports.getImg = async (req, res) => {
    Image.find({}, '-__v').lean().exec(async(err, images) => {
        if (err) {
            res.sendStatus(400)({ 'msg': 'Something went wrong' });
        }       
        for (let i = 0; i < images.length; i++) {
           //trying to get 
            await User.findOne({ _id: images[i].id}, (err, user) => {
                images[i]['username'] = user.uname;
                images[i]['url'] = req.protocol + '://' + req.get('host') + '/images/' + images[i]._id;
            });
        }
        // console.log(images);
        // res.json(images);
    })
    

    }

    【讨论】:

    • 您好,感谢您的帮助,但我有“语法错误:等待仅在异步函数中有效”作为错误。
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2017-05-27
    • 2020-11-25
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2019-08-29
    相关资源
    最近更新 更多