Skip to content

Commit b554bfb

Browse files
committed
feat: add promise race
1 parent 92df6f4 commit b554bfb

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

js/promise.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
* @Author: Chacha
33
* @Date: 2022-04-19 22:33:05
44
* @Last Modified by: Chacha
5-
* @Last Modified time: 2022-04-20 23:28:20
5+
* @Last Modified time: 2022-04-21 11:49:24
66
*/
77

88
/**
99
* Promise 练习
1010
*
1111
*/
12-
12+
// Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,
13+
// 并且只返回一个 Promise 实例, 那个输入的所有 promise 的 resolve 回调的结果是一个数组。
1314
Promise.myAll = (promises) => {
1415
return new Promise((resolve, reject) => {
1516
if (!Array.isArray(promises)) {
@@ -35,6 +36,8 @@ Promise.myAll = (promises) => {
3536
});
3637
};
3738

39+
// 该Promise.allSettled()方法返回一个在所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise,
40+
// 并带有一个对象数组,每个对象表示对应的 promise 结果。
3841
Promise.myAllSettled = (promises) => {
3942
return new Promise((resolve, reject) => {
4043
if (!Array.isArray(promises)) {
@@ -86,6 +89,15 @@ Promise.myAllSettled = (promises) => {
8689
});
8790
};
8891

92+
// Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise 就会解决或拒绝。
93+
Promise.myRace = (promises) => {
94+
return new Promise((resolve, reject) => {
95+
promises.forEach((p) => {
96+
Promise.resolve(p).then(resolve).catch(reject);
97+
});
98+
});
99+
};
100+
89101
let p1 = Promise.resolve(1);
90102
let p2 = 2;
91103
let p3 = new Promise((resolve) => {
@@ -102,3 +114,5 @@ Promise.myAll([p1, p2, p3])
102114
});
103115

104116
Promise.myAllSettled([p1, p2, p4]).then(console.log);
117+
118+
Promise.myRace([p1, p2, p3]).then(console.log);

0 commit comments

Comments
 (0)