当前位置: 首页 > news >正文

手写Promise.all

首先先回顾一下Promise.all的语法

Promise.all接收一个数组,返回一个Promise。

如果参数数组中所有的元素返回值都为成功,则.all返回一个成功状态的Promise,这个Promise的值为成功的状态值组成的数组。

如果参数数组中有元素返回失败状态,则.all返回失败状态,且值为第一个失败的元素的失败值。

手写思路:

首先先判断一下传入的参数是不是数组,不是的话进行错误提示或者返回。

然后获得每个元素的返回状态。要注意,如果元素不是Promise,其也被视为Promise,如果元素是Promise,则以该Promise的返回值为准。这个规律刚好符合Promise.resolve()方法。

因此resolve每个数组元素,如果产生reject,用catch获取,否则记录成功的状态值。

要注意,可能会有元素返回的是待定状态,因此最终是否返回成功,要根据成功状态值的个数确认。如果数组中Promise的返回值中有待定 和 成功,则返回待定状态,有 待定 成功 失败状态的情况下,返回第一个失败的状态。

手写代码如下:

Promise.all = function(paramsData){//如果参数不是数组,进行返回if(  ! Array.isArray(paramsData) ){return ;}//记录成功的状态个数let resolvedCount = 0;//记录成功的状态值let resultData = [];//遍历数组,并处理结果return new Promise((resolve, reject)=>{for(let data of paramsData){//获得当前元素的PromisePromise.resolve(data).then(//处理resolve状态(resolveData)=>{resultData[resolvedCount++] = resolveDataif(resolvedCount == paramsData.length){resolve(resultData);}}, ).catch((e) => {reject(e);})}})}

http://www.lryc.cn/news/591255.html

相关文章:

  • C#中的LINQ解析
  • Level-MC 5”雪原“
  • 探微“元宇宙”:概念内涵、形态发展与演变机理
  • MTK平台--如何查询手机连接的TX速率和带宽
  • 【PY32】使用轩微烧录器烧录PY32微控制器
  • 跨域通信inframe高级
  • Nginx/OpenResty HTTP 请求处理阶段与 Lua 实践全解20250717
  • Java中的字符串——String,StringBuilder,StringBuffer
  • 基于邻域统计分析的点云去噪方法
  • 【测试100问】没有接口文档的情况下,如何做接口测试?
  • TC500R立式加工中心主轴箱机械结构设计cad【11张】三维图+设计说明书
  • 【后端】.NET Core API框架搭建(7) --配置使用Redis
  • Android本地浏览PDF(Android PDF.js 简要学习手册)
  • React hooks——useReducer
  • 面试Redis篇-深入理解Redis缓存穿透
  • 基于YOLOv11的水面垃圾智能检测系统
  • halcon 模板匹配
  • 高精度加法模版介绍
  • 阿里云-通义灵码:隐私保护机制—为数据安全筑起铜墙铁壁
  • USRP中心频率与采样率联合设置
  • MyBatis 之配置与映射核心要点解析
  • CPU架构、三级缓存以及内存优化屏障
  • 指针数组和数组指针的应用案例
  • 「Trae IDE 全流程实战」——从 0 下载安装,到在本地跑起一个可玩的 2048 小游戏
  • SpringBoot使用ThreadLocal共享数据
  • 永磁同步电机MTPA与MTPV曲线具体仿真实现
  • 大语言模型Gemini Deep Research 全流程解读+使用攻略
  • 杨耀东老师在ICML2025上对齐教程:《语言模型的对齐方法:一种机器学习视角》
  • 死信队列:springboot+RabbitMQ实现死信队列
  • GitHub Jekyll博客本地Win开发环境搭建