node.js - 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);
})
}
解决方案
这是由于 .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);
})
}
推荐阅读
- r - 优化错误(开始,logL,下 = 下,上 = 上,方法 = optim.method,:非有限有限差分值 [1]
- c++ - 在 C++ 中使用模板过滤元组类型
- sql - SQL删除重复只考虑一列
- c++ - 并行化(openmp)函数调用会导致内存错误
- php - 如何从 php curl 帖子中删除字符集?
- neo4j - 在 Neo4j/Cypher 中高效查找连接两组节点的唯一中间节点
- python - Python pyfuglet 模块安装
- android - 这个错误一次又一次地弹出,我该如何解决这个问题
- python - Pandas 将季度日期索引数据帧转换为最近总和的每日索引数据帧
- c# - 从 C# 调用时,Npgsql.Postgresql Exception 42883 函数不存在 - 是否有可用的工作示例?