实现一个 Promise.race

推荐答案

-- -------------------- ---- -------
-------- --------------------- -
  ------ --- ----------------- ------- -- -
    -- -------------------------- -
      ------ ---------- ------------------- ---- -- -- ---------
    -

    --- ------ ------- -- --------- -
      -------------------------------------- --------
    -
  ---
-

本题详细解读

1. 函数定义

promiseRace 函数接受一个包含多个 Promise 对象的数组 promises 作为参数。该函数返回一个新的 Promise 对象。

2. 参数校验

在函数内部,首先检查传入的参数是否是一个数组。如果不是数组,则立即拒绝返回的 Promise,并抛出一个 TypeError

3. 遍历 Promise 数组

使用 for...of 循环遍历 promises 数组中的每一个 Promise 对象。对于每个 Promise,使用 Promise.resolve 将其转换为一个 Promise 对象(以防传入的不是 Promise),然后调用 then 方法。

4. then 方法的作用

then 方法接收两个回调函数:resolvereject。当任何一个 Promise 完成(无论是成功还是失败)时,resolvereject 就会被调用,从而使得 promiseRace 返回的 Promise 也相应地完成。

5. 返回结果

最终,promiseRace 返回的 Promise 将会是第一个完成的 Promise 的结果(无论是 resolved 还是 rejected)。

6. 使用示例

-- -------------------- ---- -------
----- -------- - --- ----------------- ------- -- -
  ------------------- ---- -------
---

----- -------- - --- ----------------- ------- -- -
  ------------------- ---- -------
---

---------------------- ----------------------- -- -
  ------------------- -- -- -----
---

在这个示例中,promise2 会先完成,因此 promiseRace 返回的 Promise 会 resolve 为 'two'

纠错
反馈