抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

今天把剩下的自带函数给实现了,简单实现一下,太难的就先放放放吧。。

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+规范,不能用!

建议自己去翻源码,再见!(源码附在下面了

评论