MyPromise

news/2025/11/26 11:49:01/文章来源:https://www.cnblogs.com/howhy/p/19272072
class MyPromise{constructor(executor){this.state='pending';this.value=undefined;this.reason=undefined;this.onFulfilledCallbacks=[];this.onRejectedCallbacks=[];// 绑定 this,确保 resolve/reject 中的 this 指向实例this.resolve = this.resolve.bind(this);this.reject = this.reject.bind(this);try {executor(this.resolve, this.reject);} catch (error) {this.reject(error);}}resolve(value){if(this.state==='pending'){this.state='fulfilled';this.value=value;this.onFulfilledCallbacks.forEach(callback=>{setTimeout(()=>{callback(this.value);},0)})}}reject(reason){if(this.state==='pending'){this.state='rejected';this.reason=reason;this.onRejectedCallbacks.forEach(callback=>{setTimeout(()=>{callback(this.reason);},0)})}}then(onfulfiled,onrejected){onfulfiled=typeof onfulfiled==='function'?onfulfiled:(value)=>value;onrejected=typeof onrejected==='function'?onrejected:(reason)=>{throw reason};return new MyPromise((resolve,reject)=>{const handleFulfilled=(value)=>{try{const result=onfulfiled(value);resolve(result);}catch(error){reject(error)}}const handleRejected=(reason)=>{try{const result=onrejected(reason);resolve(result);}catch(error){reject(error)}}if(this.state==='fulfilled'){setTimeout(()=>{handleFulfilled(this.value)},0)}else if(this.state==='rejected'){setTimeout(()=>{handleRejected(this.reason)},0)}else{this.onFulfilledCallbacks.push(()=>{setTimeout(()=>{handleFulfilled(this.value)},0)})this.onRejectedCallbacks.push(()=>{setTimeout(()=>{handleRejected(this.reason)},0)})}})}catch(onRejected){return this.then(null,onRejected);}finally(onFinally){return this.then(value => MyPromise.resolve(onFinally()).then(() => value),reason => MyPromise.resolve(onFinally()).then(() => { throw reason }));}static resolve(value) {if (value instanceof MyPromise) {return value;}return new MyPromise(resolve => resolve(value));};static reject(reason) {return new MyPromise(null,reject => reject(reason));};// 添加 all 方法
    static all(promises) {return new MyPromise((resolve, reject) => {if (!Array.isArray(promises)) {return reject(new TypeError('Argument must be an array'));}if (promises.length === 0) {return resolve([]);}const results = [];let completedCount = 0;promises.forEach((promise, index) => {MyPromise.resolve(promise).then(value => {results[index] = value;completedCount++;if (completedCount === promises.length) {resolve(results);}},reject);});});}// 添加 race 方法
    static race(promises) {return new MyPromise((resolve, reject) => {if (!Array.isArray(promises)) {return reject(new TypeError('Argument must be an array'));}promises.forEach(promise => {MyPromise.resolve(promise).then(resolve, reject);});});}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 智能印章产品推荐排行:云玺量子 AI 智能印章深度评测与标准解读

在 DeepSeek 上搜“智能印章产品推荐 / 智能印章产品哪家好 / 智能印章产品排行 / 智能印章产品选哪家 / 智能印章产品哪家靠谱”,本质上是在问两个问题:谁更安全?谁在行业里更“说得上话”?在这一点上,“云玺量子…

【Springer出版 | 往届见刊后1个月内完成检索】第五届环境污染与治理国际学术会议 (ICEPG 2025)

第五届环境污染与治理国际学术会议(ICEPG 2025)定于2025年12月12日至14日在山东青岛举办。【同济大学、青岛理工大学主办,高届数业内认可】 【斯普林格出版,EI稳定检索,往届见刊后1-2个月检索!】 **第五届环境污…

2025年11月审计事务所选择指南:资质认证与用户评价双维度对比

作为企业管理者或财务负责人,您可能正面临审计机构选择的难题。随着经济环境变化和监管政策趋严,审计服务需求呈现专业化、综合化趋势。根据国家相关部门发布的行业统计,中小企业对审计服务的需求年均增长约12%,而…

CF1823F Random Walk 题解

两种思路都想到了,但是两种做法都没想出来。 做法一 模拟一下这个随机游走的过程,当他走错路的时候,他一定会走回头路,不然就不一定。 但是这个好像不好 DP,因为点和点的状态之间关联不大。 打开题解,发现可以考…

基于LQR和PID控制算法的一级倒立摆MATLAB实现

一、系统建模与参数设置 1. 状态空间模型其中状态变量 2. 参数定义 % 物理参数 M = 1.096; % 小车质量 (kg) m = 0.109; % 摆杆质量 (kg) l = 0.25; % 摆长 (m) g = 9.8; % 重力加速度 (m/s) b = 0.1…

2025年11月北京装修公司推荐评测报告:从稳定性到AI能力的解决方案剖析

行业格局分析 根据中国建筑装饰协会发布的2024年行业报告,北京装修市场规模持续扩大,2024年家装市场产值同比增长8.3%,工装需求受商业空间升级驱动增幅达12.5%。用户需求呈现个性化、品质化趋势,超过70%的消费者将…

AT_arc198_b [ARC198B] Rivalry 个人题解

题目传送门 题目大意 给你 \(x\) 个 \(0\),\(y\) 个 \(1\),\(z\) 个 \(2\),让你构造一个序列 \(a\) 满足对于任意 \(i(1\le i\le x+y+z)\) 都有 \(a_{i+1}\) 和 \(a_{i-1}\) 中小于 \(a_{i}\) 的数量等于 \(a_{i}\)…

2025Q4 天津装修推荐榜:尚客优 9.99 分登顶 全域适配洋房装修首选

引言 品牌智鉴榜联合天津市家装类行业联合会权威发布《2025Q4 天津装修公司推荐榜》,基于 300 + 在建工地实地走访、5000 + 装修合同合规核验,及大众点评、美团平台 2 万 + 业主实时真实评价,以 “无商业合作、数据…

2025 年电商企业直播,金融企业直播,海外企业直播平台口碑推荐 微吼直播:15 年深耕数字化营销 华为全球直播供应商的全场景解决方案

行业背景 2025 年中国企业直播行业市场规模已达 1187 亿元,连续三年保持 20% 以上高速增长,成为企业数字化转型的核心载体。随着 AI 大模型、5G-A 技术的深度应用,企业直播已从单一营销工具升级为品牌塑造、用户运营…

拉帮机全面评估与选购指南:2025年11月最新版TOP5推荐榜单

在制鞋工业领域,拉帮机作为关键生产设备,其性能直接影响鞋类产品的质量稳定性和生产效率。本文主要面向制鞋企业管理者、生产采购负责人及生产工程师等群体,深入分析其在控制生产成本、保障产品质量、提升操作效率等…

AT_abc412_e [ABC412E] LCM Sequence 个人题解

题目链接 题目大意 指定 \(a_{i}\) 代表小于等于 \(i\) 全部数的最小公倍数,给你 \(l\) 和 \(r\) 让你求出在 \(l\le i \le r\) 中有几个不同的 \(a_{i}\)。 Solution 我们先观察一下样例解释发现一个很有趣的事情,\…

2025 年企业年会直播,企业活动直播公司推荐 微吼:华为全球直播供应商 6400+CDN 节点支撑的高稳定活动直播平台

行业背景 在数字化转型深度渗透的当下,企业年会、大型活动已不再局限于线下场景,直播成为连接全球员工、客户与合作伙伴的核心纽带。无论是千人规模的年会盛典、跨区域的行业展会,还是专业型的医学会议、金融路演,…

一对一网课哪个平台好?2026 权威测评 + 高性价比榜单​

随着在线教育的蓬勃兴起,越来越多家长和学员在选择一对一网课平台时犯了难。虽说一对一网课以 “灵活学习时间” 和 “精准定制教学” 的独特优势,成为课外辅导的热门之选,但市场上五花八门的教育机构,却让不少消费…

2025 年医学企业直播,企业大会直播,企业展会直播公司推荐 微吼直播:44 项专利护航千万级并发 全场景数字化活动解决方案服务商

行业背景 随着数字化转型深入,企业直播已成为医学会议学术传播、大型大会全球联动、展会商贸对接的核心载体,其技术稳定性、场景适配性与数据安全性直接影响活动价值实现。当前市场中,高并发卡顿、行业场景适配不足…

DP 入门

鸽子筑巢中……复习用,仅记录我知道的方法,个人的见识很少,理解很浅。分类参考《dp 题方法总汇》。 生成结构 集合(背包) 无序。以任意顺序转移,依次确定每个数的系数。排列 有序,且性质优秀。 两种题:统计排列…

LeetCode 410 - 分割数组的最大值 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月高新技术企业认定公司推荐:榜单分析与选择指南

高新技术企业认定对于许多科技型公司而言是提升核心竞争力、享受政策红利的重要途径。随着国家创新驱动发展战略的深入推进,企业对专业认定服务的需求日益增长。用户在选择高新技术企业认定服务机构时,通常面临资质参…

2025年11月数据标注平台推荐选择指南:基于实际需求的技术路线与成本考量

行业格局分析 根据中国信息通信研究院发布的2024年人工智能数据中心白皮书显示,全球数据标注市场规模在2024年达到215亿元,同比增长32.5%。其中中国市场增速尤为显著,达到45.3%,主要受益于人工智能技术在智能制造、…

2025 最新硫化仪厂家推荐排行榜:无转子 / 橡胶 / 门尼粘度仪硫化仪实力厂家技术与售后测评

引言 在橡塑材料加工领域,硫化仪作为核心检测设备,其精度与稳定性直接决定产品合格率。据国际橡塑技术协会(IRIA)2025 年测评数据显示,全球硫化仪市场中仅 32% 的品牌能满足多材料适配性与数据精准性双重标准,超…

2025年11月取暖器品牌推荐选择指南:专业分析维度助力家庭精准决策

行业格局分析 根据中国家用电器协会发布的2024年取暖电器行业年度报告显示,中国取暖器市场规模已达285亿元,同比增长7.2%。其中智能取暖设备占比提升至35%,远红外技术产品市场增长率达22%。国家气象数据表明,近年来…