四、实现catch()方法
Promise.prototype.catch就是Promise.prototype.then(null, onRejected)的别名,所以实现就很简单了:
1 | catch(onRejected) { |
五、Promise.resolve()
这里就不考虑参数是thenable
对象了,那么参数有两种情况:
- Promise实例
- 不是Promise实例
1
2
3
4
5
6
7
8
9static resolve(value) {
if (value instanceof Promise) {
// 如果是Promise实例,直接返回
return value;
} else {
// 如果不是Promise实例,返回一个新的Promise对象,状态为FULFILLED
return new Promise((resolve, reject) => resolve(value));
}
}
六、Promise.reject()
Promise.reject
也会返回一个Promise
实例,状态为REJECTED
与Promise.resolve
不同的是,Promise.reject
方法的参数会原封不动地作为reject
的参数
1 | static reject(reason) { |
七、Promise.all()
返回一个promise
对象,只有当所有promise
都成功时返回的promise
状态才成功,需要注意的点是:
- 所有的promise状态变为FULFILLED,返回的promise状态才变为FULFILLED。
- 一个promise状态变为REJECTED,返回的promise状态就变为REJECTED。
- 数组成员不一定都是promise,需要使用Promise.resolve()处理。
1 | static all(promiseArr) { |
八、Promise.race()
Promise.race()
实现就比较简单了:
1 | static race(promiseArr) { |