以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
35. 实现`Promise.race()`

实现Promise.race()的代码如下:

function race(promises) {
  return new Promise((resolve, reject) => {
    for (let promise of promises) {
      promise.then(resolve).catch(reject);
    }
  });
}

该函数接收一个包含Promise实例的数组,返回一个新的Promise实例。

函数内部通过遍历Promise实例数组,将每个Promise实例的resolve和reject方法传递给新的Promise实例。当其中一个Promise实例resolve或reject时,新的Promise实例也会resolve或reject。

使用示例:

let p1 = new Promise(resolve => setTimeout(() => resolve('p1'), 1000));
let p2 = new Promise((resolve, reject) => setTimeout(() => reject('p2'), 500));
let p3 = new Promise(resolve => setTimeout(() => resolve('p3'), 2000));

race([p1, p2, p3])
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  });

输出:

p1

在上面的示例中,Promise.race()返回的Promise实例只会resolve第一个完成的Promise实例,也就是p1,p2和p3中谁完成的最快。因为p2在500ms后被reject,而p1和p3分别在1000ms和2000ms后被resolve,所以结果为p1。