自建promise

基本原理

1.通过构造方法生成一个promise对象,但是构造方法中传入的方法不会立即调用
2.通过then给promise对象中的成功方法列表中添加方法,通过catch给promise中的失败方法列表添加方法
3.初始状态为pending,且变为fulfilled或rejected后不会再被改变
4.在添加完所有方法后执行构造函数中添加的方法,仅有构造函数中传入的方法可以修改promise的执行状态,后续then中添加的方法不会有resolve,reject的传参

class PromiseA {
    constructor(asyncFunc) {
        this.handlerList = []
        this.catchList = []
        this.state = 'pending'
        setTimeout(() => {
            asyncFunc(this.resolve.bind(this),this.reject.bind(this))
        });
        return this
    }

    resolve() {
        if (this.state !== 'pending') { // 保证promise状态在改变后不会再被修改
            return
        } 
        this.state = 'fulfilled'
        this.handlerList.forEach(element => { // 依次运行所有注册在成功调用方法列表中的方法
            element()
        });
    }

    reject(err) {
        if (this.state !== 'pending') { // 保证promise状态在改变后不会再被修改
        return
        } 
        this.state = 'rejected'
        this.catchList.forEach(element => { // 依次运行所有注册在错误捕获方法列表中的方法
            element(err)
        })
    }

    then(asyncFunc) {
        this.handlerList.push(asyncFunc)
        return this
    }

    catch(errFunc) {
        this.catchList.push(errFunc) 
    }
}

new PromiseA((resolve, reject) => {
    setTimeout(() => resolve(), 3000)
    // reject('123')
    reject()
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容