diff --git a/docs/promise.md b/docs/promise.md index 79b1564..57c62ec 100644 --- a/docs/promise.md +++ b/docs/promise.md @@ -637,14 +637,14 @@ console.log('one'); ## Promise.reject() -`Promise.reject(reason)`方法也会返回一个新的Promise实例,该实例的状态为`rejected`。它的参数用法与`Promise.resolve`方法完全一致。 +`Promise.reject(reason)`方法也会返回一个新的 Promise 实例,该实例的状态为`rejected`。 ```javascript var p = Promise.reject('出错了'); // 等同于 var p = new Promise((resolve, reject) => reject('出错了')) -p.then(null, function (s){ +p.then(null, function (s) { console.log(s) }); // 出错了 @@ -652,6 +652,24 @@ p.then(null, function (s){ 上面代码生成一个Promise对象的实例`p`,状态为`rejected`,回调函数会立即执行。 +注意,`Promise.reject()`方法的参数,会原封不动地作为`reject`的理由,变成后续方法的参数。这一点与`Promise.resolve`方法不一致。 + +```javascript +const thenable = { + then(resolve, reject) { + reject('出错了'); + } +}; + +Promise.reject(thenable) +.catch(e => { + console.log(e === thenable) +}) +// true +``` + +上面代码中,`Promise.reject`方法的参数是一个`thenable`对象,执行以后,后面`catch`方法的参数不是`reject`抛出的“出错了”这个字符串,而是`thenable`对象。 + ## 两个有用的附加方法 ES6的Promise API提供的方法不是很多,有些有用的方法可以自己部署。下面介绍如何部署两个不在ES6之中、但很有用的方法。