【问题标题】:Does using catch require throw使用 catch 是否需要 throw
【发布时间】:2019-02-27 11:08:12
【问题描述】:

这里的新手问题 - 我有一个程序通过 promises/fetch 进行 API 调用。我想添加一个 catch,但我想知道我是否还需要在其中添加一个 throw 语句?或者我可以单独使用 catch 吗?

【问题讨论】:

    标签: javascript ecmascript-6 error-handling promise throw


    【解决方案1】:

    我想添加一个 catch,但我想知道我是否还需要在其中添加一个 throw 语句?

    不,您不需要throw,除非那是您想要的编程结果。

    .catch() 用于“处理”被拒绝的承诺。您自己不必使用throw 来处理被拒绝的承诺。

    throw 可以与.catch() 结合使用,如果您想在存在被拒绝的承诺时执行某些代码,然后将被拒绝的承诺返回给调用者。在这种情况下,你会做这样的事情:

    function someFunction() {
        return fn().then(val => {
           // do something here when promise resolves
           return someVal;
        }).catch(err => {
           // do something here when promise rejects
           console.log(err);
           // throw the error to keep the returned promise rejected
           throw err;
        });
    }
    

    如果你只有一个.catch() 而没有把它扔进去,那么被拒绝的承诺将被视为“已处理”并且将被解决,而不是被拒绝。请注意,这与用于同步代码的 try/catch 几乎相同。

    这是一个非常好的示例,您不需要 throw 和 .catch()。

    const rp = require('request-promise');
    const defaultConfig = {...};
    
    function readRemoteConfig(url) {
        return rp({url, json: true}).catch(err => {
            // when remote config is not available, substitute default config
            return defaultConfig;
        });
    }
    

    仅供参考,即使您想拒绝承诺,您也不必使用throw 来完成此操作。你也可以返回一个被拒绝的承诺,这将实现相同的结果:

    function someFunction() {
        return fn().then(val => {
           // do something here when promise resolves
           return someVal;
        }).catch(err => {
           // do something here when promise rejects
           console.log(err);
           // return rejected promise to keep the returned promise rejected
           return Promise.reject(err);
        });
    }
    

    这是个人喜好还是使用throw。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2012-06-04
      • 2017-05-11
      • 1970-01-01
      • 2019-09-29
      • 2010-12-14
      • 2015-07-07
      相关资源
      最近更新 更多