onrejected 与 Promise 中的 catch

onrejected vs catch in Promise

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

您的第一段代码不会捕获错误,因为错误处理程序与抛出错误的地方相同.then


关于你的问题

.catch(onRejected);

等同于

.then(null, onRejected);

不确定

.then(_, onRejected);

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

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