美文网首页
封装Promise

封装Promise

作者: 那麽快樂 | 来源:发表于2019-10-14 21:56 被阅读0次
    class Mypromise {
            constructor(cb) {
                this.status = 'pending';
                this.data = null;
                this.resolveArr = [];
                this.rejecteArr = [];
                this.resolve = val => {
                    if (this.status === 'pending') {
                        this.status = 'fulfilled';
                        this.data = val
                        this.resolveArr.forEach(cbs=> {
                        cbs();
                    })
                    }
                }
                this.reject = err => {
                    if (this.status === 'pending') {
                        this.status = 'rejected';
                        this.data = err
                        this.rejecteArr.forEach(cbs => {
                        cbs();
                    })
                    }
                }
                cb(this.resolve, this.reject);
            }
            then(success, fail) {
                
                success = typeof success === 'function' ? success : function (val) { return val };
                fail = typeof fail === 'function' ? fail : function (val) { return val };
                // 得考虑三种状态
                // 等待的状态
                if (this.status === 'pending') {
    
                    // 成功集合
                    this.resolveArr.push(() => {
                        success(this.data);
                    });
    
                    // 失败的集合
                    this.rejecteArr.push(() => {
                        fail(this.data);
                    });
                }
    
                // 成功的状态
                if (this.status === 'fulfilled') {
                    success(this.data);
                }
    
                // 失败的状态
                if (this.status === 'rejected') {
                    fail(this.data);
                }
            }
            catch(fail){
                this.then(null, fail);
            }
        }
        // 自己的
        let mpro = new Mypromise(function (resolve, reject) {
            // 同步
            // resolve(1);
            // reject(0);
    
            // 异步
            setTimeout(() => {
                resolve(22222);
                // reject(-1);
            },1000);
        });
    
        mpro.then((data) => {
            console.log(data, '成功了');
        }, (err) => {
            console.log(err, '失败了');
        });
    
        mpro.catch((err) => {
            console.log(err, 'err');
        });
    

    相关文章

      网友评论

          本文标题:封装Promise

          本文链接:https://www.haomeiwen.com/subject/ewmdmctx.html