尝试手写 Promise

92 阅读1分钟

Promise 是一个对象,它代表了一个异步操作的最终完成或者失败。

为了加深对 Promise 的理解,使用代码实现 Promise。

// Promise 的三个状态:pedding--初始态,resolve--成功,reject--失败
function Promise(executor) {
    let self = this
    self.status = 'pending'
    self.value = undefined
    self.reason = undefined

    function resolve(value) {
        if (self.status === 'pending') {
            self.status = 'resolve'
            self.value = value
        }
    }

    function reject(reason) {
        if (self.status === 'pending') {
            self.status = 'reject'
            self.reason = reason
        }
    }

    try {
        executor(resolve, reject)
    } catch (error) {
        reject(error)
    }
}

// onFulfilled 成功的回调
// onRejected 失败的回调

Promise.prototype.then = function (onFulfilled, onRejected) {
    let self = this
    if (self.status === 'resolved') {
        onFulfilled(self.value)
    }
    if (self.status === 'rejected') {
        onRejected(self.reason)
    }
    
}

module.exports = Promise

目前暂时实现 Promise 的三种状态,对于 Promise 的链式调用 Promise.then() 的方法,之后再作补充。