Skip to content

Commit 0f668be

Browse files
committed
Add tasks
1 parent 7b16b87 commit 0f668be

3 files changed

Lines changed: 87 additions & 0 deletions

File tree

JavaScript/Tasks/1-thenable.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
});

JavaScript/Tasks/2-reject.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
})();

JavaScript/Tasks/3-class.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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+
})();

0 commit comments

Comments
 (0)