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

手写Promise.all

下面是使用 tsx 实现的手写版 Promise.all 函数。Promise.all 接收一个可迭代对象(通常是数组)作为参数,该数组中的每个元素都是一个 Promise 对象,当所有 Promise 都成功完成时,它会返回一个新的 Promise,该 Promise 会在所有 Promise 都成功时以一个包含所有结果的数组来解析;如果其中任何一个 Promise 被拒绝,那么 Promise.all 返回的 Promise 会立即以该拒绝的原因被拒绝。

function customPromiseAll<T>(promises: (Promise<T> | T)[]): Promise<T[]> {return new Promise((resolve, reject) => {if (!Array.isArray(promises)) {return reject(new TypeError('传入的参数必须是数组'));}const results: T[] = [];let completedCount = 0;if (promises.length === 0) {resolve(results);return;}promises.forEach((promise, index) => {Promise.resolve(promise).then((value) => {results[index] = value;completedCount++;if (completedCount === promises.length) {resolve(results);}}).catch((error) => {reject(error);});});});
}const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve(2);
const promise3 = Promise.resolve(3);customPromiseAll([promise1, promise2, promise3]).then((values) => {console.log(values);}).catch((error) => {console.error(error);});

上述代码实现了一个自定义的 customPromiseAll 函数,它接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。在函数内部,通过遍历传入的 Promise 数组,为每个 Promise 绑定 then 和 catch 方法。当所有 Promise 都成功完成时,将每个 Promise 的结果存储在 results 数组中,并在所有 Promise 都完成后,使用 resolve 方法返回结果数组;如果有任何一个 Promise 被拒绝,则立即使用 reject 方法返回错误信息。 

成功Promise.all:

失败promise.all: 

http://www.xdnf.cn/news/308971.html

相关文章:

  • USB接口的PCB设计
  • vue3在使用@import “./index.scss“报错
  • 互联网法院在NFT、元宇宙等新兴领域的规则创新
  • 江苏正力新能Verify认知能力测评笔试已通知 | SHL测评题库预测题 | 华东同舟求职讲求职
  • 园区网的发展
  • Hologres x 函数计算 x Qwen3,对接MCP构建企业级数据分析 Agent
  • 深度可分离卷积(0)
  • Linux 网络编程 day5 多路IO转接之改进select and poll
  • 【LeetCode Hot100 | 每日刷题】二叉树的层序遍历
  • MySQL 触发器(Trigger)讲解
  • OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()
  • SAP修改数据库表
  • 大疆三方云平台部署
  • 网页截图指南
  • PDF内容搜索--支持跨文件夹多文件、组合词搜索
  • debian中笔记本的省电选择auto-cpufreq
  • 解决windows重启后分辨率问题
  • 2025最新出版 Microsoft Project由入门到精通
  • 雅思阅读--重点短语/句式39个
  • 小红书怎么看自己ip地址?小红书更改ip地址教学
  • UE5 脚部贴地不穿过地板方案
  • 含锡废水回收率提升技术方案
  • 37-算法打卡-栈与队列-滑动窗口最大值-leetcode(239)-第三十七天
  • ==和equals的区别 hashCode和equals的联系
  • 文章记单词 | 第65篇(六级)
  • 【JavaScript】将字符串转为base64
  • C/C++ 扩展智能提示太慢或无法解析项目
  • 使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤
  • 第一章-语言基础\3.STL
  • RHCSA Linux系统 网络管理