前端/移动开发面试题更新 2026-08-05

请用 JavaScript 手写实现 Promise.all 方法,并给出完整代码。

前端/移动开发编码实现技术原理JavaScript

考察说明

考查对 Promise 原理及异步并发控制的理解和实现能力。

回答思路

  1. 【回答框架 1】Promise.all 需返回一个新的 Promise,内部遍历传入的可迭代对象,将每个元素用 Promise.resolve 包装以兼容非 Promise 值。
  2. 【回答框架 2】使用计数器记录已完成的 Promise 数量,将结果按原顺序存入数组,当所有 Promise 都 resolved 时,resolve 结果数组。
  3. 【回答框架 3】若任一 Promise 被 rejected,则立即 reject,忽略后续结果。需处理空可迭代对象的情况,此时直接 resolve 空数组。
  4. 【回答框架 4】实现时需注意处理迭代过程中的异常,例如传入不可迭代对象时应 reject。
  5. 【回答框架 5】代码结构:返回 new Promise,在 executor 中遍历并收集结果,使用计数器判断完成状态。
  6. 【关键点 1】返回新的 Promise,内部用计数器跟踪完成数量
  7. 【关键点 2】结果按原顺序存储,确保顺序一致
  8. 【关键点 3】任一 rejected 则整体 rejected,空数组直接 resolve
  9. 【易错点 1】忘记用 Promise.resolve 包装非 Promise 值
  10. 【易错点 2】数组长度不固定时使用固定索引可能导致稀疏数组问题
  11. 【易错点 3】未处理传入非可迭代对象的情况