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

手动实现promise.all

手动实现promise.all

function promiseAll(promises) {return new Promise((resolve, reject) => {const results = [];let count = 0;promises.forEach((promise, index) => {Promise.resolve(promise).then(result => {results[index] = result;count++;if (count === promises.length) {resolve(results);}}).catch(reject);});});
}

在上面的代码中,我们创建了一个名为 promiseAll 的函数。它接收一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。

promiseAll() 函数中,我们首先定义了一个空数组 results 和计数器 count,用于存储每个 Promise 对象解决后的结果和已经解决的 Promise 数量。

接下来,我们使用 forEach() 方法遍历传入的 promises 数组,将每个 Promise 对象使用 Promise.resolve() 包装成 Promise 对象,并调用 then() 方法来处理解决态(resolved)的情况。当一个 Promise 对象被解决后,它的返回值会被保存到 results 数组中,并且计数器 count 会加一。

当所有的 Promise 对象都已经 settled 后,即 count 等于 promises.length 时,我们调用 resolve()results 数组作为 Promise 函数的解决值(resolved value)。

如果任何一个 Promise 对象被拒绝(rejected),则整个 promiseAll() 函数会将拒绝值作为其返回的 Promise 对象的拒绝值(rejected value)。

以下是一个使用 promiseAll() 的示例代码:

const promises = [new Promise(resolve => setTimeout(() => resolve(1), 1000)),new Promise(resolve => setTimeout(() => resolve('string'), 2000)),new Promise(resolve => setTimeout(() => resolve(true), 3000))
];promiseAll(promises).then(results => console.log(results)).catch(error => console.log(error));
// Output: [1, "string", true]

在上面的代码中,我们使用了一个 Promise 对象数组 promises,其中每个 Promise 对象都有不同的超时时间。调用 promiseAll(promises) 返回一个 Promise 对象,最终输出结果为 [1, "string", true],这是一个由三个 Promise 对象的结果组成的数组。

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

相关文章:

  • 如何搭建关键字驱动自动化测试框架?这绝对是全网天花板的教程
  • 字符串反转操作
  • TensorFlow 智能移动项目:1~5
  • [MAUI 项目实战] 手势控制音乐播放器(四):圆形进度条
  • web路径专题+会话技术
  • Jetpack Compose 实战 宝可梦图鉴
  • 高效时间管理日历 DHTMLX Event Calendar 2.0.3 Crack
  • ASIC-WORLD Verilog(2)FPGA的设计流程
  • 数字化体验时代,企业如何做好内部知识数字化管理
  • Qt5.12實戰之Linux靜態庫與動態庫多文件生成a與so文件並調用
  • Spring 之初始化前中后详解
  • 企业数字化转型路上的陷阱有哪些
  • Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++)
  • 面试官:“你会组件化开发操作吗?它的优势在哪?”
  • 腾讯新增长,AI扛大旗?
  • 项目6:实现数据字典的展示与缓存
  • JsNode算法题acm模式输入
  • Javaweb小练习---在JSP中使用Javabean访问数据库完成用户信息的简单添加
  • (十七)排序算法-基数排序
  • JMM之先行发生原则(happens-before)详解
  • 含分布式电源的配电网可靠性评估研究(Matlab代码实现)
  • 安全加固服务是什么?哪些行业需要做?
  • 好程序员:Java书籍推荐,程序员必看的5本Java书籍,赶紧收藏!
  • maven将jar包添加到本地仓库
  • 4.12--计算机网络之TCP篇之TCP 协议的缺陷+如何基于 UDP 协议实现可靠传输?--(复习+大总结)---沉下心来(加油呀)
  • 数据库网络编程
  • 为什么现代企业都在使用ERP系统 它有哪些优势
  • 别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
  • LeetCode算法小抄-- 最近公共祖先 和 完全二叉树的节点个数
  • php、redis实现分布式锁的正确写法(原子操作 通用类 加讲解)