# 题目描述
请你实现Promise.race()
MDN上的描述👇
Promise.race()静态方法接受Promise的可迭代对象(Array)作为输入,并返回一个Promise。这个返回的承诺与第一个返回的最终状态一致
返回第一个存储的Promise结果,不管他是resolve还是reject
promise .race()方法是promise并发性方法之一。当你想要完成第一个异步任务,但不关心它的最终状态(即它可以成功或失败)时,它是有用的
如果可迭代对象包含一个或多个非承诺值和/或已经确定的承诺,则promise .race()将确定在可迭代对象中找到的这些值中的第一个
# 代码实现
const race = function (iterator) {
  if (!Array.isArray(iterator)) {
    throw new TypeError("argument must be an array!");
  }
  if (iterator.length === 0) {
    return new Promise(() => {});
  }
  return new Promise((resolve, reject) => {
    iterator.forEach((item) => {
      Promise.resolve(item).then(
        (data) => {
          resolve(data);
        },
        (reason) => {
          reject(reason);
        }
      );
    });
  });
};
const p1 = new Promise((resolve) => {
  setTimeout(() => {
    resolve("2");
  }, 3000);
});
const p2 = 3;
const p3 = new Promise((resolve) => {
  setTimeout(() => {
    resolve("5");
  }, 1000);
});
const p4 = new Promise((resolve) => {
  setTimeout(() => {
    resolve("4");
  }, 2000);
});
race([p1, p3, p4]).then((data) => console.log("race: ", data));
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41