【发布时间】:2018-08-02 08:30:04
【问题描述】:
以下是为我的用户仪表板检索信息的路线。我试图避免嵌套所有的承诺(我听说它叫做回调地狱)并且仍然得到正确的结果。我假设下面的代码 sn-p 没有返回任何内容,因为在运行时它会吹过所有的承诺,只是在承诺有机会解决之前返回三个空数组。我尝试使用 async/await 没有成功,我不确定这是否是我需要的。在这种给定的情况下,处理这些承诺并一次返回所有结果的最佳实践是什么?
// @route GET api/user/dashboard
// @desc Retrieve all of the user's dashboard info
// @access Private
router.get("/dashboard",
passport.authenticate("jwt", { session: false }),
(req, res) => {
const donations = [];
const events = [];
const teams = [];
req.user.donations.forEach(donation_id => {
Donation.findOne({ _id: donation_id })
.then(donation => {
if (donation) {
donations.push(donation);
}
})
.catch(err => console.log(err));
});
req.user.events.forEach(event_id => {
Event.findOne({ _id: event_id })
.then(event => {
if (event) {
events.push(event);
}
})
.catch(err => console.log(err));
});
req.user.teams.forEach(team_id => {
Team.findOne({ _id: team_id })
.then(team => {
if (team) {
teams.push(team);
}
})
.catch(err => console.log(err));
});
return res.status(200).json({ data: { donations, events, teams } });
}
);
【问题讨论】: