今天把剩下的自带函数给实现了,简单实现一下,太难的就先放放放吧。。
Promise.prototype.catch()
catch() 方法返回一个Promise (en-US),并且处理拒绝的情况。它的行为与调用Promise.prototype.then(undefined, onRejected)
相同。 (事实上, calling obj.catch(onRejected)
内部calls obj.then(undefined, onRejected)
).
catch只处理拒绝的情况,没有报错就不会走catch,将传来的处理函数继续then传递下去就好了
catch(onRejected) {
return this.then(null, onRejected)
}
Promise.resolve()
**Promise.resolve(value)**方法返回一个以给定值解析后的Promise
对象。如果这个值是一个 promise ,那么将返回这个 promise ;如果这个值是thenable(即带有"then"
方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态;否则返回的promise将以此值完成。此函数将类promise对象的多层嵌套展平
直接返回个成功的Promise
static resolve(val){
return new Promise(resolve => {
resolve(val)
})
}
Promise.reject()
**Promise.reject()**方法返回一个带有拒绝原因的Promise
对象。
static reject(val){
return new Promise((resolve,reject) => {
reject(val)
})
}
Promise.all()
Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise
实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise
的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。
static all(promiseArr){
let ret = []
return new Promise((resolve,reject)=>{
try{
promiseArr.forEach(p=>{
Promise.resolve(p).then(res=>{
ret.push(res)
if(ret.length === promiseArr.length){
resolve(ret)
}
})
})
}catch (e){
reject(e)
}
})
}
快吐了,不写了,以上都是Promise的ES6新增语法的简单写法 ,没有参考PromiseA+规范,不能用!
建议自己去翻源码,再见!(源码附在下面了