Promise中的onrejected和catch有什么区别?

21

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
2个回答

23

你的第一段代码无法捕捉到错误,因为错误处理程序在抛出错误的相同 .then


关于你的问题

.catch(onRejected);

等同于

.then(null, onRejected);

不确定是什么

.then(_, onRejected);

我想取决于 _ 代表什么。


8
OP并没有将“_”作为变量名,而是用它来表示他只是询问第二个参数。 - hippietrail

1
在第一个例子中,你的onRejected仅适用于Promise.resolve()。在then(onResolved, onRejected)中,只有两个函数中的一个会被调用,而不是同时调用。尝试使用Promise.reject('something').then(),你将在控制台中打印出somethingcatch()应用于你返回的promise,所以错误会如预期一样被捕获。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接