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-19 22:40:07
5
+ * @Last Modified time: 2022-04-20 23:28:20
6
6
*/
7
7
8
8
/**
12
12
13
13
Promise . myAll = ( promises ) => {
14
14
return new Promise ( ( resolve , reject ) => {
15
+ if ( ! Array . isArray ( promises ) ) {
16
+ return reject ( "Promise.myAll accepts an array" ) ;
17
+ }
18
+
15
19
let count = 0 ;
16
20
let result = [ ] ;
17
21
const length = promises . length ;
@@ -31,12 +35,63 @@ Promise.myAll = (promises) => {
31
35
} ) ;
32
36
} ;
33
37
38
+ Promise . myAllSettled = ( promises ) => {
39
+ return new Promise ( ( resolve , reject ) => {
40
+ if ( ! Array . isArray ( promises ) ) {
41
+ return reject ( "Promise.myAllSettled accepts an array" ) ;
42
+ }
43
+
44
+ const length = promises . length ;
45
+ let result = [ ] ;
46
+ let remaining = length ;
47
+
48
+ if ( length === 0 ) {
49
+ return resolve ( length ) ;
50
+ }
51
+
52
+ const response = ( i , value ) => {
53
+ if ( value instanceof Promise ) {
54
+ value . then (
55
+ ( res ) => {
56
+ response ( i , res ) ;
57
+ } ,
58
+ ( err ) => {
59
+ result [ i ] = {
60
+ status : "rejected" ,
61
+ reason : err ,
62
+ } ;
63
+
64
+ if ( -- remaining === 0 ) {
65
+ resolve ( result ) ;
66
+ }
67
+ }
68
+ ) ;
69
+
70
+ return ;
71
+ }
72
+
73
+ result [ i ] = {
74
+ status : "fulfilled" ,
75
+ value,
76
+ } ;
77
+
78
+ if ( -- remaining === 0 ) {
79
+ resolve ( result ) ;
80
+ }
81
+ } ;
82
+
83
+ for ( let i = 0 ; i < length ; i ++ ) {
84
+ response ( i , promises [ i ] ) ;
85
+ }
86
+ } ) ;
87
+ } ;
88
+
34
89
let p1 = Promise . resolve ( 1 ) ;
35
90
let p2 = 2 ;
36
91
let p3 = new Promise ( ( resolve ) => {
37
92
setTimeout ( resolve , 100 , 3 ) ;
38
93
} ) ;
39
- // let p4 = Promise.reject("出错啦");
94
+ let p4 = Promise . reject ( "出错啦" ) ;
40
95
41
96
Promise . myAll ( [ p1 , p2 , p3 ] )
42
97
. then ( ( res ) => {
@@ -45,3 +100,5 @@ Promise.myAll([p1, p2, p3])
45
100
. catch ( ( err ) => {
46
101
console . log ( "err" , err ) ;
47
102
} ) ;
103
+
104
+ Promise . myAllSettled ( [ p1 , p2 , p4 ] ) . then ( console . log ) ;
0 commit comments