@@ -57,36 +57,37 @@ The `AsyncIterator` interface additionally exposes
57
57
## Example: fetching Wikipedia links related to natural numbers
58
58
In the example below, we create an iterator of links found on Wikipedia pages for natural numbers.
59
59
``` JavaScript
60
- var AsyncIterator = require (' asynciterator' );
60
+ import https from ' https' ;
61
+ import { resolve } from ' url' ;
62
+ import { IntegerIterator } from ' asynciterator' ;
61
63
62
64
// Iterate over the natural numbers
63
- var numbers = new AsyncIterator. IntegerIterator ({ start: 0 , end: Infinity });
65
+ const numbers = new IntegerIterator ({ start: 0 , end: Infinity });
64
66
// Transform these numbers into Wikipedia URLs
65
- var urls = numbers .map (function (number ) {
66
- return ' https://en.wikipedia.org/wiki/' + number;
67
- });
67
+ const urls = numbers .map (n => ` https://en.wikipedia.org/wiki/${ n} ` );
68
68
// Fetch each corresponding Wikipedia page
69
- var pages = urls .transform (function (url , done ) {
70
- require ( ' https' ) .get (url, function ( response ) {
71
- var page = ' ' ;
72
- response .on (' data' , function ( data ) { page += data; });
73
- response .on (' end' , function () { pages . _push (page); done (); });
69
+ const pages = urls .transform ((url , done , push ) => {
70
+ https .get (url, response => {
71
+ let page = ' ' ;
72
+ response .on (' data' , data => { page += data; });
73
+ response .on (' end' , () => { push (page); done (); });
74
74
});
75
75
});
76
76
// Extract the links from each page
77
- var links = pages .transform (function (page , done ) {
78
- var search = / href="([^ "] + )"/ g , match, resolve = require ( ' url ' ). resolve ;
77
+ const links = pages .transform ((page , done , push ) => {
78
+ let search = / href="([^ "] + )"/ g , match;
79
79
while (match = search .exec (page))
80
- this . _push (resolve (' https://en.wikipedia.org/' , match[1 ]));
80
+ push (resolve (' https://en.wikipedia.org/' , match[1 ]));
81
81
done ();
82
82
});
83
83
```
84
84
85
85
We could display a link every 0.1 seconds:
86
86
``` JavaScript
87
- setInterval (function () {
88
- var link = links .read ();
89
- if (link) console .log (link);
87
+ setInterval (() => {
88
+ const link = links .read ();
89
+ if (link)
90
+ console .log (link);
90
91
}, 100 );
91
92
```
92
93
@@ -114,7 +115,7 @@ The [`read` method](http://rubenverborgh.github.io/AsyncIterator/docs/AsyncItera
114
115
or ` null ` when no item is available.
115
116
116
117
``` JavaScript
117
- var numbers = new AsyncIterator. IntegerIterator ({ start: 1 , end: 2 });
118
+ const numbers = new IntegerIterator ({ start: 1 , end: 2 });
118
119
console .log (numbers .read ()); // 1
119
120
console .log (numbers .read ()); // 2
120
121
console .log (numbers .read ()); // null
@@ -125,8 +126,8 @@ you should wait until the next [`readable` event](http://rubenverborgh.github.io
125
126
This event is not a guarantee that an item _ will_ be available.
126
127
127
128
``` JavaScript
128
- links .on (' readable' , function () {
129
- var link;
129
+ links .on (' readable' , () => {
130
+ let link;
130
131
while (link = links .read ())
131
132
console .log (link);
132
133
});
@@ -139,9 +140,9 @@ An AsyncIterator can be switched to _flow_ mode by listening to the [`data` even
139
140
In flow mode, iterators generate items as fast as possible.
140
141
141
142
``` JavaScript
142
- var numbers = new AsyncIterator. IntegerIterator ({ start: 1 , end: 100 });
143
- numbers .on (' data' , function ( number ) { console .log (' number' , number); } );
144
- numbers .on (' end' , function () { console .log (' all done!' ); } );
143
+ const numbers = new IntegerIterator ({ start: 1 , end: 100 });
144
+ numbers .on (' data' , number => console .log (' number' , number));
145
+ numbers .on (' end' , () => console .log (' all done!' ));
145
146
```
146
147
147
148
To switch back to on-demand mode, simply remove all ` data ` listeners.
@@ -152,11 +153,11 @@ which are preserved when the iterator is cloned.
152
153
This is useful to pass around metadata about the iterator.
153
154
154
155
``` JavaScript
155
- var numbers = new AsyncIterator. IntegerIterator ();
156
+ const numbers = new IntegerIterator ();
156
157
numbers .setProperty (' rate' , 1234 );
157
158
console .log (numbers .getProperty (' rate' )); // 1234
158
159
159
- var clone = numbers .clone ();
160
+ const clone = numbers .clone ();
160
161
console .log (clone .getProperty (' rate' )); // 1234
161
162
162
163
numbers .setProperty (' rate' , 4567 );
@@ -167,7 +168,7 @@ You can also attach a callback
167
168
that will be called as soon as the property is set:
168
169
169
170
``` JavaScript
170
- var numbers = new AsyncIterator. IntegerIterator ();
171
+ const numbers = new IntegerIterator ();
171
172
numbers .getProperty (' later' , console .log );
172
173
numbers .setProperty (' later' , ' value' );
173
174
// 'value'
0 commit comments