SOURCE

const MyPromise = (executer) => {
    let self = this;
    self.status = 'pending'
    self.data = undefined
    self.onResolveCallback = []
    self.onRejectCallback = []

    const reslove = (value) => {
        if(self.status === 'pending') {
            self.status = 'resolved';
            self.data = value;
            for (let i = 0;i < self.onResolveCallback.length;i++) {
                self.onRejectCallback[i](value)
            }
        }
    }

    const rejcet = (reason) => {
        if (self.status === 'pending') {
            self.status = 'rejected'
            self.data = reason
            for (let i = 0;i < self.onRejectCallback.length;i++) {
                self.onRejectCallback[i](reason)
            }
        }
    }
    const reject = () => {}

    try {
        executer(resolve, reject)
    } catch(e){
        reject(e)
    }
}

MyPromise.prototype.then = (onResolved, onRejected) => {

    onResolved = typeof onResolved === 'function'?onResolved:function(v) {}
    onRejected = typeof onRejected === 'function'? onRejected: function(r) {}

    if (this.status === 'resolved') {
        return new Promise((resolve, reject) => {
            try {
                const x = onResolved(this.data)
                if (x instanceof MyPromise) {
                    x.then(resolve, reject)
                }
                resolve(x)
            } catch(e) {
                rejcet(e) 
            }
        })
    }

    if (self.status === 'rejected') {
        return new Promise((resolve, reject) => {
            try {
                const x = onRejected(this.data)
                if (x instanceof MyPromise) {
                    x.then(resolve, reject)
                }
            } catch(e) {
                rejcet(e) 
            }
        })
    }

    if (self.status === 'pending') {
        return new Promise((resolve, reject) => {

        })
    }
}
console 命令行工具 X clear

                    
>
console