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