SOURCE

function myPromise(constructor) {
    let self = this;
    self.status = "padding";
    self.value = undefined;
    self.reason = undefined;
    function resolve(value) {
        if (self.status === "padding") {
            self.value = value;
            self.status = "resolved"
        }
    }
    function reject(reason) {
        if (self.status === "padding") {
            self.reason = reason;
            self.status = "rejected"
        }
    }
    try {
        constructor(resolve, reject)
    } catch (e) {
        reject(e)
    }
}
myPromise.prototype.then = function (onFullfilled, onRejected) {
    let self = this;
    switch (self.status) {
        case "resolved":
            onFullfilled(self.value);
            break;
        case "rejected":
            onRejected(self.reason);
            break;
        default:
    }
}

var p = new myPromise(function (resolve, reject) { resolve(1) });
p.then(function (x) { console.log(x) })
console 命令行工具 X clear

                    
>
console