File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: change `iterate` contract from callbacks to Thenable
4+
5+ const iterate = ( items , callback ) => {
6+ for ( const item of items ) {
7+ callback ( item ) ;
8+ }
9+ } ;
10+
11+ const electronics = [
12+ { name : 'Laptop' , price : 1500 } ,
13+ { name : 'Keyboard' , price : 100 } ,
14+ { name : 'HDMI cable' , price : 10 } ,
15+ ] ;
16+
17+ // Use await syntax to get items
18+ iterate ( electronics , ( item ) => {
19+ console . log ( item ) ;
20+ } ) ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: support rejection with an error after last item
4+
5+ const iterate = ( items ) => {
6+ let index = 0 ;
7+ return {
8+ then ( fulfill , /*reject*/ ) {
9+ // Call both: fulfill and reject
10+ if ( index < items . length ) {
11+ fulfill ( items [ index ++ ] ) ;
12+ }
13+ }
14+ } ;
15+ } ;
16+
17+ const electronics = [
18+ { name : 'Laptop' , price : 1500 } ,
19+ { name : 'Keyboard' , price : 100 } ,
20+ { name : 'HDMI cable' , price : 10 } ,
21+ ] ;
22+
23+ ( async ( ) => {
24+ const items = iterate ( electronics ) ;
25+ const item1 = await items ;
26+ console . log ( item1 ) ;
27+ const item2 = await items ;
28+ console . log ( item2 ) ;
29+ const item3 = await items ;
30+ console . log ( item3 ) ;
31+ const item4 = await items ;
32+ console . log ( item4 ) ;
33+ } ) ( ) ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: rewrite to `class Iterator` implementing
4+ // Thenable contract with private fields.
5+
6+ const iterate = ( items ) => {
7+ let index = 0 ;
8+ return {
9+ then ( fulfill , /*reject*/ ) {
10+ if ( index < items . length ) {
11+ fulfill ( items [ index ++ ] ) ;
12+ }
13+ }
14+ } ;
15+ } ;
16+
17+ const electronics = [
18+ { name : 'Laptop' , price : 1500 } ,
19+ { name : 'Keyboard' , price : 100 } ,
20+ { name : 'HDMI cable' , price : 10 } ,
21+ ] ;
22+
23+ ( async ( ) => {
24+ const items = iterate ( electronics ) ;
25+ // Use `new Iterator(electronics)`
26+ const item1 = await items ;
27+ console . log ( item1 ) ;
28+ const item2 = await items ;
29+ console . log ( item2 ) ;
30+ const item3 = await items ;
31+ console . log ( item3 ) ;
32+ const item4 = await items ;
33+ console . log ( item4 ) ;
34+ } ) ( ) ;
You can’t perform that action at this time.
0 commit comments