【问题标题】:onrejected vs catch in Promise [duplicate]承诺中的 onrejected 与 catch [重复]
【发布时间】:2016-03-10 08:05:03
【问题描述】:

ES6 Promise 中的catchthen(_,onRejected) 有什么区别?我只知道onRejected 不处理内部Promise 的拒绝状态。

Promise.resolve().then(() => {
    return new Promise((resolve,reject) => {
      throw new Error('Error occurs');
    }); 
},er => console.log(er)); //Chrome throws `Uncaught (in promise)`

Promise.resolve().then(() => {
    return new Promise((resolve,reject) => {
      throw new Error('Error occurs');
    }); 
}).catch(er => console.log(er)); //Error occurs

【问题讨论】:

    标签: javascript promise es6-promise


    【解决方案1】:

    您的第一段代码不会捕获错误,因为错误处理程序位于引发错误的同一 .then


    至于你的问题

    .catch(onRejected);
    

    等同于

    .then(null, onRejected);
    

    不知道是什么

    .then(_, onRejected);
    

    会做,取决于我猜_ 是什么

    【讨论】:

    • OP 没有使用_ 作为变量名,而是表示他只是询问第二个参数。
    【解决方案2】:

    在第一个示例中,您的 onRejected 仅适用于 Promise.resolve()。在then(onResolved, onRejected) 中,只会调用两个函数中的一个,而不是两者。尝试使用Promise.reject('something').then(),您将在控制台中打印somethingcatch() 适用于您返回的承诺,因此错误被按预期捕获。

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2016-01-21
      • 2016-11-23
      • 2020-06-23
      • 2021-10-17
      • 2020-08-20
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多