Promise.then的第二个参数与catch的区别

时间:2021-03-23 19:20:47

1、异常捕获

getJSON("/post/1.json").then(function(post) { return getJSON(post.commentURL); }).then(function funcA(comments) { // 这里的异常,then的第二个参数捕获不到
  console.log("resolved: ", comments); }, function funcB(err){ console.log("rejected: ", err); });

2、冒泡性质

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获。

getJSON('/post/1.json').then(function(post) { return getJSON(post.commentURL); }).then(function(comments) { // some code
}).catch(function(error) { // 处理前面三个Promise产生的错误
});

上面代码中,一共有三个 Promise 对象:一个由getJSON产生,两个由then产生。它们之中任何一个抛出的错误,都会被最后一个catch捕获。

这也是then的第二个参数处理不了的。