【问题标题】:Is Better to use .catch in end of my Code?在我的代码末尾使用 .catch 更好吗?
【发布时间】:2018-04-09 11:34:34
【问题描述】:

在我的代码末尾使用 .catch 还是正常的 try/catch 更好?
你能解释一下吗?

示例 1:

User.findOne({ _id: 444, User })
    .then(obj => {
        console.log(obj.inviteCount);
        return (obj.inviteCount);
    }).catch(err => console.log(err));

示例 2:

try{
 User.findOne({ _id: 444, User })
        .then(obj => {
            console.log(obj.inviteCount);
            return (obj.inviteCount);
        })
}
catch(err) {
console.log(err)
}

【问题讨论】:

  • 示例 2 实际上不起作用。承诺中的错误通过承诺拒绝传递,只能使用.catch 捕获。所以你的第二个例子catch 语句永远不会被触发。
  • 由于我的英语不好,我不太了解,你能解释一下并给我写一个例子吗?以及如何在第二个示例中使用 try catch?

标签: javascript try-catch


【解决方案1】:

Promise 拒绝是异步的,使用 try/catch 块您只能捕获同步错误。

您可以使用新的 async/await 语法并通过 babel 或其他方式进行编译(取决于您想在哪里运行代码)。

async/await 示例(在 node v8+ 中工作)

try {
    const obj = await User.findOne({ _id: 444, User });
    console.log(obj.inviteCount);

    return obj.inviteCount;
} catch(err) {
    console.log(err);
}

或者您可以使用 bluebird 的 Promise.coroutine(在节点 6+ 中工作):

// load bluebird first, so the `Promise` object is monkey patched
// or in node use `const Promise = require('bluebird');`
Promise.coroutine(function*() { 
    try {
        const obj = yield User.findOne({ _id: 444, User });
        console.log(obj.inviteCount);

        return obj.inviteCount;
    } catch (e) {
        console.log(err);
    }
})();

【讨论】:

  • 您的意思是,如果我在第二个示例中添加 async/await,我可以使用它吗?请给我一个例子
猜你喜欢
  • 2023-01-21
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2023-02-05
  • 2012-11-25
  • 2020-08-02
  • 2016-05-27
  • 1970-01-01
相关资源
最近更新 更多