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

请用 JavaScript 编写一个函数,实现与 Promise.race 等价的逻辑,并说明其执行特点。

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

考察说明

考察对 Promise 内部机制和静态方法实现原理的理解。

回答思路

  1. 【回答框架 1】Promise.race 接收一个可迭代对象,返回一个新 Promise,当输入中任意一个 Promise 先敲定(settled)时,新 Promise 就以相同的状态和值敲定。
  2. 【回答框架 2】实现思路是遍历输入,对每个元素调用 Promise.resolve 包装为 Promise,然后为每个 Promise 注册 then 回调,回调中直接调用 resolve 或 reject 来敲定外部 Promise。
  3. 【回答框架 3】需要注意处理空数组的情况:返回的 Promise 永远处于 pending 状态。
  4. 【回答框架 4】实现代码为:function race(promises) { return new Promise((resolve, reject) => { for (const p of promises) { Promise.resolve(p).then(resolve, reject); } }); }
  5. 【关键点 1】使用 Promise.resolve 统一处理普通值和 thenable。
  6. 【关键点 2】一旦某个 Promise 敲定,外部 Promise 立即敲定,后续回调忽略。
  7. 【关键点 3】空输入时返回 forever pending 的 Promise。
  8. 【易错点 1】不要使用 forEach 而忽略异步注册可能造成的时序问题(此处同步注册无问题)。
  9. 【易错点 2】注意输入可能不是数组,需要用 for...of 或 Array.from 处理可迭代对象。
  10. 【易错点 3】避免手动处理 thenable 而不用 Promise.resolve,以免遗漏特殊行为。