【发布时间】:2020-03-11 18:53:05
【问题描述】:
我在使用异步调用时遇到了麻烦。这是给我带来问题的代码sn-p
company.find({ managerID: req.session.manager.managerID })
.exec((err, _companies) => {
if(err)
return res.status(500).send({ message: "Uh, oh! Something went wrong." });
else {
var data = [];
var i = 0;
_companies.forEach(c => {
user.find({ companyID: c._id, status: 0})
.then(_user => {
// console.log(_user);
var dummy = {
companyID: c._id,
companyName: c.companyName,
selectedCurrency: c.selectedCurrency,
metrics: c.metrics,
headAdmin: _user[0].email,
headName: _user[0].designer
};
console.log(dummy);
data.push(dummy);
console.log(data);
i++;
}).catch(err => {
return res.status(500).send({ message: "Uh, oh! Something went wrong." });
});
});
if(i == _companies.length)
return res.status(200).send({ data: data });
}
});
我的数据对象在对象正确形成之前被发送。
我尝试从 .exec 切换到 .then 承诺,希望它可以修复它,甚至尝试仅在循环完成后返回(甚至不返回空数组)。
每当我在return res.status(200).send({ data: data}) 之前调用console.log("hi") 时,它总是在console.log(dummy) 之前打印
等待解决这个问题,如果是,我应该如何使用它,因为我不熟悉如何使用它?
【问题讨论】:
标签: node.js mongodb asynchronous mongoose