【发布时间】:2019-08-08 08:00:19
【问题描述】:
我正在尝试查询一个集合,从中获取 ID,然后我正在查询另一个集合并发送响应。没有问题。我的问题是我正在使用 foreach,所以我试图从块中取出值并发送响应。但它正在抛出null。我安慰了块内的值,它给出了响应,但我无法访问块外的值。
代码
getDetails = async (req, res) => {
let data: any[] = [];
await employee.find({
_id: new mongoose.Types.ObjectId(req.body.id)
}, (err, obj) => {
if (err) {
console.log("No Such Employee")
} else {
obj.forEach(element => {
employer.find({
user: new mongoose.Types.ObjectId(element.user)
}, (err, details) => {
if (err) {
console.log("No such employer")
} else {
for (var i = 0; i < detail.length; i++) {
let p_info = {
"id": detail._id,
"fname": details[i].fname "lname": details[i].lname "phone": details[i].phone,
"email": details[i].email,
}
data.push(p_info); // I can get value here
}
}
})
});
res.send(data); // Cannot get value here
}
});
}
【问题讨论】:
-
多个对象怎么可能有相同的_id,
_id应该是唯一的。 -
.forEach()中的异步操作,您需要所有这些操作的结果,这根本行不通。您的.forEach()循环在循环内的任何异步操作完成之前完成执行。因此,当您尝试发送data时,它是空的。您最好的机会是对所有数据库操作使用 Promise 接口(没有简单的回调)。然后,使用普通的for循环而不是.forEach(),您可以在异步操作(返回承诺)上使用await,以便能够收集您可以在for循环之后发送的所有结果。
标签: javascript node.js typescript express