promise 浏览器实现的源码_基于Promises/A+规范实现的Promise源码(TypeScript版)

本文档介绍了如何基于Promises/A+规范用TypeScript实现Promise,并提供了测试方法。通过tsc编译后,使用特定的测试框架检测Promise实现是否符合规范。catch函数被解释为仅处理onRejected状态的回调,而all、race、any和resolve等其他方法的实现则相对简单。文章还引用了相关资源以帮助理解规范。
摘要由CSDN通过智能技术生成
const PENDING = 'pengding';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';
class PromiseA {
    private _data: any;
    private _status: string;
    private _onFulfilledCallbacks: Function[];
    private _onRejectedCallbacks: Function[];

    constructor(func: Function) {
        this._data = null;
        this._status = PENDING;
        this._onFulfilledCallbacks = [];
        this._onRejectedCallbacks = [];

        try {
            func(this._resolve.bind(this), this._reject.bind(this));
        } catch (err) {
            this._reject(err);
        }
    }

    private _resolve(value: any): void | PromiseA {
        process.nextTick(() => {
            if (value instanceof PromiseA) {
                return value.then(this._resolve.bind(this), this._reject.bind(this));
            }
            if (this._status !== PENDING) return;
            this._status = FULFILLED;
            this._data = value;
            for (let cb of this._onFulfilledCallbacks) {
                cb(this._data);
            }
        });
    }

    private _reject(reason: any): void {
        process.nextTick(() => {
            if (this._status !== PENDING) return;
            this._status = REJECTED;
            this._data = reason;
            for (let cb of this._onRejectedCallbacks) {
                cb(this._data);
            }
        });
    }

    public then(onFulfilled: Function, onRejected: Function): PromiseA {
        onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : function (v) {return v}
        onRejected = typeof onRejected === 'function
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值