手写Promise

1、构造函数实现

function Promise(executor) {

    // 添加属性

    this.PromiseState = 'pending';

    this.PromiseResult = null;

    const self = this;

    let resolve = function (data) {

        // 判断状态

        if (self.PromiseState !== 'pending') return

        //修改状态,设置对象值

        self.PromiseState = 'fulfilled';

        self.PromiseResult = data;

    };

    let reject = function (data) {

        // 判断状态

        if (self.PromiseState !== 'pending') return

        //修改状态,设置对象值

        self.PromiseState = 'rejected';

        self.PromiseResult = data;

    };

    try {

        // 同步调用 执行器函数

        executor(resolve, reject);

    } catch (e) {

        reject(e)

    }

}

// 添加.then方法

Promise.prototype.then = function (onResolve, onReject) {

    //调用回掉函数

    if (this.PromiseState === 'fulfilled') {

        onResolve(this.PromiseResult)

    }

    if (this.PromiseState === 'rejected') {

        onReject(this.PromiseResult)

    }

}

2、类实现

class Promise {

    constructor(executor) {

        // 添加属性

        this.PromiseState = 'pending';

        this.PromiseResult = null;

        const self = this;

        let resolve = function (data) {

            // 判断状态

            if (self.PromiseState !== 'pending') return

            //修改状态,设置对象值

            self.PromiseState = 'fulfilled';

            self.PromiseResult = data;

        };

        let reject = function (data) {

            // 判断状态

            if (self.PromiseState !== 'pending') return

            //修改状态,设置对象值

            self.PromiseState = 'rejected';

            self.PromiseResult = data;

        };

        try {

            // 同步调用 执行器函数

            executor(resolve, reject);

        } catch (e) {

            reject(e)

        }

    };

    /// 添加.then方法

    then = function (onResolve, onReject) {

        //调用回掉函数

        if (this.PromiseState === 'fulfilled') {

            onResolve(this.PromiseResult)

        }

        if (this.PromiseState === 'rejected') {

            onReject(this.PromiseResult)

        }

    }

}

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

推荐阅读更多精彩内容

友情链接更多精彩内容