在这里,我首先搜索车票,然后搜索已预订的火车票。我刚接触promises,所以我想知道这是不是正确的方式,或者它可以在没有嵌套的情况下完成?
router.get('/ticket/:id', isLoggedIn, (req, res) => {
Ticket.findById(req.params.id)
.populate('passengers')
.exec()
.then(foundTicket => {
Train.findById(foundTicket.trainDetails._id)
.exec()
.then(foundTrain => {
res.render("ticket",{ticket:foundTicket, train:foundTrain});
})
.catch(err => {
console.log(err)
})
})
.catch(err => {
console.log(err)
})
});发布于 2018-01-03 19:47:01
你可以通过返回第二个承诺来进一步扁平化它。Catch将捕获链中的任何错误。
router.get('/ticket/:id', isLoggedIn, (req, res) => {
Ticket.findById(req.params.id)
.populate('passengers')
.exec()
.then(foundTicket => {
return Train.findById(foundTicket.trainDetails._id)
.exec();
}).then(foundTrain => {
res.render("ticket",{ticket:foundTicket, train:foundTrain});
}).catch(err => {
console.log(err)
});
});发布于 2018-01-03 19:50:56
是的,你应该使用flatten it by returning the inner promise,这样你就可以链接到它上,并且只需要一个错误处理程序。
router.get('/ticket/:id', isLoggedIn, (req, res) => {
Ticket.findById(req.params.id).populate('passengers').exec()
.then(foundTicket =>
Train.findById(foundTicket.trainDetails._id).exec()
).then(foundTrain => {
res.render("ticket",{ticket:foundTicket, train:foundTrain});
}, err => {
console.log(err);
res.status(500); // don't forget to respond!
});
});https://stackoverflow.com/questions/48076527
复制相似问题