File tree Expand file tree Collapse file tree 4 files changed +136
-2
lines changed Expand file tree Collapse file tree 4 files changed +136
-2
lines changed Original file line number Diff line number Diff line change 1
1
- ` Promise.race() ` lets you know as soon as one of the given promises either fulfills or rejects
2
2
- ` Promise.allSettled() ` lets you know when all promises either fulfill or reject
3
3
- ` Promise.all() ` lets you know as soon as one of the given promises rejects or when all of them fulfill
4
- - ` Promises.any() ` lets you know as soon as one of the given promises fulfills or when none of them fulfills.
4
+ - ` Promises.any() ` lets you know as soon as one of the given promises fulfills or when none of them fulfills.
5
+
6
+ ## Creating custom iterator
7
+
8
+ ` [Symbol.iterator]() ` works like any other method except that it's automatically called if we use ` for...of `
9
+ on the object.
10
+
11
+ The iterator object is designed to maintain internal pointer to a position in the items.
12
+
13
+ ``` JS
14
+ const collection = {
15
+ a: 10 ,
16
+ b: 20 ,
17
+ c: 30 ,
18
+ [Symbol .iterator ]() {
19
+ let i = 0 ;
20
+ const values = Object .keys (this );
21
+ return {
22
+ next : () => {
23
+ return {
24
+ value: this [values[i++ ]],
25
+ done: i > values .length
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+ for (const value of collection) {
33
+ console .log (value);
34
+ }
35
+ ```
36
+
37
+ ## Creating custom asynchronous iterator
38
+
39
+ An object is classified as asychronous iterable when it has a ` Symbol.asyncIterator ` method that returns an
40
+ asynchronous iterator.
41
+
42
+ ``` JS
43
+ const collection = {
44
+ a: 10 ,
45
+ b: 20 ,
46
+ c: 30 ,
47
+ [Symbol .asyncIterator ]() {
48
+ const keys = Object .keys (this );
49
+ console .log (' keys: ' , keys);
50
+ let i = 0 ;
51
+ return {
52
+ next : () => {
53
+ return new Promise ((resolve , reject ) => {
54
+ setTimeout (() => {
55
+ resolve ({
56
+ value: this [keys[i++ ]],
57
+ done: i > keys .length
58
+ });
59
+ }, 1000 );
60
+ });
61
+ }
62
+ };
63
+ }
64
+ };
65
+
66
+ const iterator = collection[Symbol .asyncIterator ]();
67
+ ```
Original file line number Diff line number Diff line change
1
+ const collection = {
2
+ a : 10 ,
3
+ b : 20 ,
4
+ c : 30 ,
5
+ [ Symbol . iterator ] ( ) {
6
+ let i = 0 ;
7
+ const values = Object . keys ( this ) ;
8
+ return {
9
+ next : ( ) => {
10
+ return {
11
+ value : this [ values [ i ++ ] ] ,
12
+ done : i > values . length
13
+ }
14
+ }
15
+ }
16
+ }
17
+ }
18
+
19
+ for ( const value of collection ) {
20
+ console . log ( value ) ;
21
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Retrieving URLs separately
3
+ */
4
+
5
+ import fetch from 'node-fetch' ;
6
+
7
+ const srcArr = [
8
+ 'https://eloux.com/async_js/examples/1.json' ,
9
+ 'https://eloux.com/async_js/examples/2.json' ,
10
+ 'https://eloux.com/async_js/examples/3.json' ,
11
+ ] ;
12
+
13
+ srcArr [ Symbol . asyncIterator ] = function ( ) {
14
+ let i = 0 ;
15
+ return {
16
+ async next ( ) {
17
+ if ( i === srcArr . length ) {
18
+ return {
19
+ done : true
20
+ }
21
+ } else {
22
+ const url = srcArr [ i ++ ] ;
23
+ const response = await fetch ( url ) ;
24
+ if ( ! response . ok ) {
25
+ throw new Error ( 'Unable to retrieve URL: ' + url ) ;
26
+ }
27
+
28
+ return {
29
+ value : await response . json ( ) ,
30
+ done : false
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ const iterator = srcArr [ Symbol . asyncIterator ] ( ) ;
38
+
39
+ iterator . next ( ) . then ( result => {
40
+ console . log ( result . value . firstName ) ;
41
+ } ) ;
42
+
43
+ iterator . next ( ) . then ( result => {
44
+ console . log ( result . value . firstName ) ;
45
+ } ) ;
46
+
47
+ iterator . next ( ) . then ( result => {
48
+ console . log ( result . value . firstName ) ;
49
+ } ) ;
Original file line number Diff line number Diff line change 27
27
"dependencies" : {
28
28
"async" : " ^3.2.3" ,
29
29
"node-fetch" : " ^3.2.0"
30
- }
30
+ },
31
+ "type" : " module"
31
32
}
You can’t perform that action at this time.
0 commit comments