# 题目描述
请你实现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));
Copied!
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