首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是使用承诺的正确方式吗?

这是使用承诺的正确方式吗?
EN

Stack Overflow用户
提问于 2018-01-03 19:32:04
回答 2查看 56关注 0票数 0

在这里,我首先搜索车票,然后搜索已预订的火车票。我刚接触promises,所以我想知道这是不是正确的方式,或者它可以在没有嵌套的情况下完成?

代码语言:javascript
复制
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)
    })
});
EN

回答 2

Stack Overflow用户

发布于 2018-01-03 19:47:01

你可以通过返回第二个承诺来进一步扁平化它。Catch将捕获链中的任何错误。

代码语言:javascript
复制
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)
    });
});
票数 0
EN

Stack Overflow用户

发布于 2018-01-03 19:50:56

是的,你应该使用flatten it by returning the inner promise,这样你就可以链接到它上,并且只需要一个错误处理程序。

代码语言:javascript
复制
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!
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48076527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档