自己动手用js写一个Promise对象

eventLoop那里Promise对象的产生的回调应该放到微队列中,但是不知道该怎么实现,所以放到了宏队列中(有大佬知道的话劳请告知,哪里看不懂可以把问题放到评论区或者私信我,看到就回)


const MyPromise = (() => {
   

const PENDING = 'pending',
    RESOLVED = 'resolved',
    REJECTED = 'rejected',
    MyPromiseStatus = Symbol('MyPromiseStatus'),
    MyPromiseValue = Symbol('MyPromiseValue'),
    changeStatus = Symbol('changeStatus'),
    thenables = Symbol('thenable'),  //thenable 业队列
    catchables = Symbol('catchable'),   /catchable作业队列
    subsequentHandle = Symbol('subsequentHandle')//后续处理函数的封装
    linkPromise = Symbol('linkPromise');
return class {
   
    /**
     * 将Promise从未决状态推向已决状态时,改变状的函数
     * @param {*} data 状态数据
     * @param {*} immediatelyStatus 推向已决状态应该所处的状态 
     * @param {*} targetStatus 将要推向的状态
     * @returns 
     */
    [changeStatus](value, targetStatus, queue) {
   
        // 如果状态是pending
        if (this[MyPromiseStatus] !== PENDING) {
   
            return;
        }
        // 状态是已决态
        this[MyPromiseStatus] = targetStatus;
        this[MyPromiseValue] = value;
        // 遍历执行作业队列中的处理函数
        queue.forEach(handle => handle(thi[MyPromiseValue]))
    }
    constructor(untreated) {
   
        // untreated表示未决阶段的处理函数
        this[MyPromiseStatus] = PENDING;
        this[MyPromiseValue] = undefined;
        this[thenables] = [];
        this[catch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值