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: create Promise-returning adapter function `totalAsync`
4+ // Do not change function `total` contract, just call `total` from
5+ // `totalAsync` and convert contracts
6+
7+ // Should not be changed
8+ const total = ( items , callback ) => {
9+ let result = 0 ;
10+ for ( const item of items ) {
11+ if ( item . price < 0 ) {
12+ callback ( new Error ( 'Negative price is not allowed' ) ) ;
13+ return ;
14+ }
15+ result += item . price ;
16+ }
17+ callback ( null , result ) ;
18+ } ;
19+
20+ // const totalAsync = (items) => new Promise...
21+
22+ const electronics = [
23+ { name : 'Laptop' , price : 1500 } ,
24+ { name : 'Keyboard' , price : 100 } ,
25+ { name : 'HDMI cable' , price : 10 } ,
26+ ] ;
27+
28+ // Also rewrite call, use .then instead of callback
29+ total ( electronics , ( error , money ) => {
30+ if ( error ) console . error ( { error } ) ;
31+ else console . log ( { money } ) ;
32+ } ) ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: change `iterate` contract from chainable callbacks
4+ // to Promise (chainable or you can call it with await syntax)
5+
6+ const iterate = ( items ) => {
7+ let index = 0 ;
8+ const chain = {
9+ next : ( callback ) => {
10+ if ( index < items . length ) {
11+ callback ( items [ index ++ ] ) ;
12+ }
13+ return chain ;
14+ }
15+ } ;
16+ return chain ;
17+ } ;
18+
19+ const electronics = [
20+ { name : 'Laptop' , price : 1500 } ,
21+ { name : 'Keyboard' , price : 100 } ,
22+ { name : 'HDMI cable' , price : 10 } ,
23+ ] ;
24+
25+ // Use await syntax to get items
26+ iterate ( electronics ) . next ( ( item ) => {
27+ console . log ( item ) ;
28+ } ) . next ( ( item ) => {
29+ console . log ( item ) ;
30+ } ) . next ( ( item ) => {
31+ console . log ( item ) ;
32+ } ) ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: support rejection with an error, if no more items in
4+ // `items` array are available to return with `.next()`
5+ // Change throwing error to returning rejected Promise.
6+
7+ const iterate = ( items ) => {
8+ let index = 0 ;
9+ return {
10+ next : ( ) => new Promise ( ( fulfill ) => {
11+ if ( index < items . length ) {
12+ return fulfill ( items [ index ++ ] ) ;
13+ }
14+ throw new Error ( 'No more items to iterate' ) ;
15+ } )
16+ } ;
17+ } ;
18+
19+ const electronics = [
20+ { name : 'Laptop' , price : 1500 } ,
21+ { name : 'Keyboard' , price : 100 } ,
22+ { name : 'HDMI cable' , price : 10 } ,
23+ ] ;
24+
25+ ( async ( ) => {
26+ const items = iterate ( electronics ) ;
27+ const item1 = await items . next ( ) ;
28+ console . log ( item1 ) ;
29+ const item2 = await items . next ( ) ;
30+ console . log ( item2 ) ;
31+ const item3 = await items . next ( ) ;
32+ console . log ( item3 ) ;
33+ const item4 = await items . next ( ) ;
34+ console . log ( item4 ) ;
35+ } ) ( ) ;
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ // Task: here is given code you can't touch but you need to
4+ // write solution below to sum given prices (wrapped in promises).
5+ // Use Promise.all to resolve promises.
6+ // Use functions: `formatMoney` and `sum` as utilities.
7+ // Additional task: add .catch and .finally blocks in chain
8+
9+ // Do not touch following code
10+
11+ const CURRENCY_RATE = 1.09 ;
12+
13+ const convert = ( { price } ) => Promise . resolve ( price * CURRENCY_RATE ) ;
14+
15+ const electronics = [
16+ { name : 'Laptop' , price : 1500 } ,
17+ { name : 'Keyboard' , price : 100 } ,
18+ { name : 'HDMI cable' , price : 10 } ,
19+ ] ;
20+
21+ const prices = electronics . map ( convert ) ;
22+
23+ const formatMoney = ( x ) => parseFloat ( x . toFixed ( 2 ) ) ;
24+
25+ const sum = ( a , b ) => a + b ;
26+
27+ // Write solution below
You can’t perform that action at this time.
0 commit comments