四、实现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) { | 
