2
2
* @Author : Chacha
3
3
* @Date : 2022-04-19 22:33:05
4
4
* @Last Modified by: Chacha
5
- * @Last Modified time: 2022-04-20 23:28:20
5
+ * @Last Modified time: 2022-04-21 11:49:24
6
6
*/
7
7
8
8
/**
9
9
* Promise 练习
10
10
*
11
11
*/
12
-
12
+ // Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,
13
+ // 并且只返回一个 Promise 实例, 那个输入的所有 promise 的 resolve 回调的结果是一个数组。
13
14
Promise . myAll = ( promises ) => {
14
15
return new Promise ( ( resolve , reject ) => {
15
16
if ( ! Array . isArray ( promises ) ) {
@@ -35,6 +36,8 @@ Promise.myAll = (promises) => {
35
36
} ) ;
36
37
} ;
37
38
39
+ // 该Promise.allSettled()方法返回一个在所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise,
40
+ // 并带有一个对象数组,每个对象表示对应的 promise 结果。
38
41
Promise . myAllSettled = ( promises ) => {
39
42
return new Promise ( ( resolve , reject ) => {
40
43
if ( ! Array . isArray ( promises ) ) {
@@ -86,6 +89,15 @@ Promise.myAllSettled = (promises) => {
86
89
} ) ;
87
90
} ;
88
91
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
+
89
101
let p1 = Promise . resolve ( 1 ) ;
90
102
let p2 = 2 ;
91
103
let p3 = new Promise ( ( resolve ) => {
@@ -102,3 +114,5 @@ Promise.myAll([p1, p2, p3])
102
114
} ) ;
103
115
104
116
Promise . myAllSettled ( [ p1 , p2 , p4 ] ) . then ( console . log ) ;
117
+
118
+ Promise . myRace ( [ p1 , p2 , p3 ] ) . then ( console . log ) ;
0 commit comments