在Promise中攻击与捕获

时间:2015-12-05 11:42:23

标签: javascript promise es6-promise

catchthen(_,onRejected)ES6 Promise之间的区别是什么?我只知道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 个答案:

答案 0 :(得分:16)

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

关于你的问题

.catch(onRejected);

相同
.then(null, onRejected);

不确定是什么

.then(_, onRejected);

会做什么,取决于我猜_

答案 1 :(得分:0)

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