推荐答案
-- -------------------- ---- ------- -------- --------------------- - ------ --- ----------------- ------- -- - -- -------------------------- - ------ ---------- ------------------- ---- -- -- --------- - --- ------ ------- -- --------- - -------------------------------------- -------- - --- -
本题详细解读
1. 函数定义
promiseRace
函数接受一个包含多个 Promise 对象的数组 promises
作为参数。该函数返回一个新的 Promise 对象。
2. 参数校验
在函数内部,首先检查传入的参数是否是一个数组。如果不是数组,则立即拒绝返回的 Promise,并抛出一个 TypeError
。
if (!Array.isArray(promises)) { return reject(new TypeError('Argument must be an array')); }
3. 遍历 Promise 数组
使用 for...of
循环遍历 promises
数组中的每一个 Promise 对象。对于每个 Promise,使用 Promise.resolve
将其转换为一个 Promise 对象(以防传入的不是 Promise),然后调用 then
方法。
for (const promise of promises) { Promise.resolve(promise).then(resolve, reject); }
4. then
方法的作用
then
方法接收两个回调函数:resolve
和 reject
。当任何一个 Promise 完成(无论是成功还是失败)时,resolve
或 reject
就会被调用,从而使得 promiseRace
返回的 Promise 也相应地完成。
5. 返回结果
最终,promiseRace
返回的 Promise 将会是第一个完成的 Promise 的结果(无论是 resolved 还是 rejected)。
6. 使用示例
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ----- -------- - --- ----------------- ------- -- - ------------------- ---- ------- --- ---------------------- ----------------------- -- - ------------------- -- -- ----- ---
在这个示例中,promise2
会先完成,因此 promiseRace
返回的 Promise 会 resolve 为 'two'
。