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

手动实现 Promise.all 的功能

function myPromiseAll(iterable) { // 1. 返回一个新的 Promise return new Promise((resolve, reject) => { // 2. 将可迭代对象转为数组,保证有 length 和索引操作 const promises = Array.from(iterable); // 3. 空数组立即 resolve if (promises.length === 0) { resolve([]); return; } // 4. 初始化结果数组和计数器 const results = new Array(promises.length); let fulfilledCount = 0; let isRejected = false; // 防止多次 reject // 5. 遍历处理每一个 promise promises.forEach((item, index) => { // 用 Promise.resolve 包装,确保非 Promise 值也能统一处理 Promise.resolve(item).then( value => { // 如果已经 reject 过,直接忽略后续的成功 if (isRejected) return; // 按原索引保存结果 results[index] = value; fulfilledCount++; // 全部完成时 resolve if (fulfilledCount === promises.length) { resolve(results); } }, error => { // 只有第一次 reject 有效 if (!isRejected) { isRejected = true; reject(error); } } ); }); }); }
http://www.jsqmd.com/news/779138/

相关文章:

  • 教育机构在AI课程实验中采用Taotoken管理学生模型调用的实践
  • 第四十一天(5.8)
  • 母亲节送妈妈什么礼物更实用?从健康、陪伴和日常使用场景看这8类 - GrowthUME
  • HC32F460_ADC驱动(一)
  • SQL中如何对聚合后的数据进行二次计算_GROUP BY与算术组合
  • 揭秘ASA投放技巧,掌握流量密码
  • XSLT被移除后的RSS美化方案
  • OpenClawWeChat:基于Wechaty的插件化微信机器人开发与部署实战
  • Spring框架快速上手!(理论+实战)
  • PWN-栈溢出
  • 一年磨一剑,今年最炸机器人Demo来了!1亿美元种子轮团队出手,单个模型解锁单手打蛋解魔方弹钢琴
  • 用Fiddler抓包查看Claude Code提示词
  • AI编程助手选型指南:从GitHub Awesome清单到高效开发实践
  • ZynqMP SD卡启动全记录:从Vivado配置到Linux命令行(基于黑金AXU2CGB板)
  • C++11 变参模板、完美转发和emplace 机制——奇牛 (Gemini润色)
  • 00后下场整顿Agent:啥都不学就能用好AI,这才是正确打开方式
  • 大数据毕业设计推荐:基于Hadoop+Django诺贝尔奖可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
  • JavaScript 打开小窗口的实现方法
  • 地铁站台门控系统集成方案:三菱Q系列PLC以太网通讯与上位机联动实例
  • 自媒体常用图片尺寸!收藏这张图就对了
  • 2026 年量化交易软件 10 强实测:9.8 分 OKQuant 领跑全市场 - GrowthUME
  • 长期使用Taotoken聚合API对项目月度账单清晰度的感受
  • 上饶GEO优化服务机构实测排行:效果与合规能力对比 - 奔跑123
  • 真空压力变送器选型攻略|6大核心参数,避开90%选型误区 - WHSENSORS
  • 2026最新AIGC动画实战教程 零基础入门到精通 附全套素材+工程文件(新手必看)
  • 【布局优化】基于改进SLP与遗传算法的梁场布局优化附Matlab代码
  • 如何高效修复损坏视频:智能MP4修复工具Untrunc实用指南
  • 宋宝华:原理和实战解析Linux中如何正确地使用内存屏障
  • 5分钟搞懂BERT tokenizer:用encode_plus为你的NLP模型准备‘标准餐’(附PyTorch/TF代码适配)
  • 上饶本地GEO优化服务机构实测排行:效果维度对比 - 奔跑123