我在使用异步调用时遇到了麻烦。这是给我带来麻烦的代码片段
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,希望它可以解决它,甚至试图仅在循环完成后才返回(甚至不返回空数组)。
每当我在console.log("hi")
之前调用return res.status(200).send({ data: data})
时,它总是在console.log(dummy)
之前被打印
等待解决此问题,如果是,我应该如何使用它,因为我对如何使用它不熟悉?