1.实现状态的变化【Promise方法手写】

实现状态的变化主要分为下面几种:

1.传入一个函数并立即调用,如果遇到错误就直接改变状态

2.实现resolve和rejected,这两个函数是用来改变状态和数据,应为这两个函数是直接调用的,所以在任务执行器中提前绑定了this的指向

3.优化代码层面:

                                (1)定义了三个常量来表示状态,方便后续的使用

                                (2)改变状态和数据需要复用,专门定义了一个方法来实现

代码实现:

// 记录Promise的三种状态
const PENDING = "pending"
const FULFILLED = "fulfilled"
const REJECTED = "rejected"

class MyPromise {
    /**
     * 创建一个Promise
     * @param {Function} executor 任务执行器 立即执行
     */
    constructor(executor) {
        this._state = PENDING // 状态
        this._value = undefined // 数据
        try {
            // 如果在执行期间发生错误 直接改变状态
            executor(this._resolve.bind(this), this._reject.bind(this))
        } catch (error) {
            this._reject(error)
        }
    }
    /**
     * 更改任务状态和数据
     * @param {String} newState // 新状态
     * @param {any} value // 数据
     */
    _changeState(newState, value) {
        if (this._state !== PENDING) {
            // 目前状态已经更改 直接返回
            return
        }
        this._state = newState
        this._value = value
    }
    /**
     * 标记当前任务完成
     * @param {any} data 任务完成的相关数据
     */
    _resolve(data) {
        // 改变状态和数据
        this._changeState(FULFILLED, data)
    }
    /**
     * 标记当前任务失败 任务失败的相关数据
     * @param {any} reason 
     */
    _reject(reason) {
        // 改变状态和数据
        this._changeState(REJECTED, reason)
    }
}

调用:

const pro = new MyPromise((resolve, reject) => {
    throw new Error(13)
})

console.log(pro)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值