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