首页 > 解决方案 > Mongoose 多个查询在第二次查询后返回

问题描述

我试图取回包含用户名和 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.jsjsonmongodbmongoosenosql

解决方案


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

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);
})

}


推荐阅读