【发布时间】:2019-08-26 22:05:25
【问题描述】:
我在 for 循环之前设置了一个数组,在 for 循环内我使用 .push() 向数组添加数据,但在此循环之后数组为空。
MessageNotification.find({for: req.user.id}, (err, notifications) => {
var userdata = [];
notifications.forEach((notif) => {
User.findById(notif.from, (err, user) => {
userdata.push({
id: user._id,
username: user.username,
thumbnail: user.thumbnail
});
});
});
console.log(userdata);
});
正如您在代码中看到的那样,我正在运行 mongoose 查询来查找特定 ID 的所有通知,然后,我正在设置一个数组来获取有关每个通知的发件人的详细信息。在 forEach 循环中,我将结果保存在数组中。第 12 行的 Console.log 返回一个空数组 [],即使第 4 行的 User.findById 获取了用户数据
【问题讨论】:
-
findById不是异步的吗? -
我认为它是异步的,在这种情况下,您的
forEach不会在执行时填充userdata,但每次查找将在稍后完成。因此,在您运行console.log时,信息尚未返回。 -
它是异步的。您需要使其同步或使用承诺等。
-
是的,但是mongoose不支持同步查询,我该怎么做?
标签: arrays node.js mongodb mongoose