1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-25 11:12:21 +00:00

docs(promise): catch方法

This commit is contained in:
ruanyf 2016-03-13 05:51:33 +08:00
parent 6067c0f34f
commit 285c194750

View File

@ -225,12 +225,12 @@ getJSON("/post/1.json").then(
getJSON("/posts.json").then(function(posts) { getJSON("/posts.json").then(function(posts) {
// ... // ...
}).catch(function(error) { }).catch(function(error) {
// 处理前一个回调函数运行时发生的错误 // 处理 getJSON 和 前一个回调函数运行时发生的错误
console.log('发生错误!', error); console.log('发生错误!', error);
}); });
``` ```
上面代码中,`getJSON`方法返回一个Promise对象如果该对象状态变为`Resolved`,则会调用`then`方法指定的回调函数;如果异步操作抛出错误,状态就会变为`Rejected`,就会调用`catch`方法指定的回调函数,处理这个错误。 上面代码中,`getJSON`方法返回一个Promise对象如果该对象状态变为`Resolved`,则会调用`then`方法指定的回调函数;如果异步操作抛出错误,状态就会变为`Rejected`,就会调用`catch`方法指定的回调函数,处理这个错误。另外,`then`方法指定的回调函数,如果运行中抛出错误,也会被`catch`方法捕获。
```javascript ```javascript
p.then((val) => console.log("fulfilled:", val)) p.then((val) => console.log("fulfilled:", val))
@ -254,7 +254,7 @@ promise.catch(function(error) {
// Error: test // Error: test
``` ```
上面代码中,Promise抛出一个错误,就被`catch`方法指定的回调函数捕获。注意,上面的写法与下面两种写法是等价的。 上面代码中,`promise`抛出一个错误,就被`catch`方法指定的回调函数捕获。注意,上面的写法与下面两种写法是等价的。
```javascript ```javascript
// 写法一 // 写法一
@ -284,7 +284,7 @@ promise.catch(function(error) {
```javascript ```javascript
var promise = new Promise(function(resolve, reject) { var promise = new Promise(function(resolve, reject) {
resolve("ok"); resolve('ok');
throw new Error('test'); throw new Error('test');
}); });
promise promise
@ -330,9 +330,9 @@ promise
}); });
``` ```
上面代码中,第二种写法要好于第一种写法,理由是前者更接近同步的写法try/catch 上面代码中,第二种写法要好于第一种写法,理由是第二种写法可以捕获前面`then`方法执行中的错误,也更接近同步的写法(`try/catch`)。因此,建议总是使用`catch`方法,而不使用`then`方法的第二个参数
跟传统的try/catch代码块不同的是如果没有使用`catch`方法指定错误处理的回调函数Promise对象抛出的错误不会传递到外层代码即不会有任何反应。 跟传统的`try/catch`代码块不同的是,如果没有使用`catch`方法指定错误处理的回调函数Promise对象抛出的错误不会传递到外层代码即不会有任何反应。
```javascript ```javascript
var someAsyncThing = function() { var someAsyncThing = function() {