Skip to content

Commit fd31b88

Browse files
author
baochau.dinh
committed
js-concepts: parallel programming with js
1 parent ad385fb commit fd31b88

File tree

6 files changed

+231
-2
lines changed

6 files changed

+231
-2
lines changed

Parallel/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- `Promise.race()` lets you know as soon as one of the given promises either fulfills or rejects
2+
- `Promise.allSettled()` lets you know when all promises either fulfill or reject
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.

Parallel/iterators.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const collection = {
2+
a: 10,
3+
b: 20,
4+
c: 30,
5+
[Symbol.asyncIterator]() {
6+
const keys = Object.keys(this);
7+
console.log('keys: ', keys);
8+
let i = 0;
9+
return {
10+
next: () => {
11+
return new Promise((resolve, reject) => {
12+
setTimeout(() => {
13+
resolve({
14+
value: this[keys[i++]],
15+
done: i > keys.length
16+
});
17+
}, 1000);
18+
});
19+
}
20+
};
21+
}
22+
};
23+
24+
const iterator = collection[Symbol.asyncIterator]();
25+
26+
iterator.next().then(result => {
27+
console.log('result: ', result);
28+
})
29+
30+
iterator.next().then(result => {
31+
console.log('result: ', result);
32+
})
33+
34+
iterator.next().then(result => {
35+
console.log('result: ', result);
36+
})
37+
38+
iterator.next().then(result => {
39+
console.log('result: ', result);
40+
})

Parallel/promises.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import fetch from 'node-fetch';
2+
3+
const promise = fetch('https://eloux.com/async_js/examples/1.json');
4+
5+
promise.then(result => {
6+
// process;
7+
const response = result.json();
8+
return response;
9+
}).catch(err => {
10+
console.error(err);
11+
});
12+

package-lock.json

Lines changed: 134 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"typescript": "^3.5.2"
2626
},
2727
"dependencies": {
28-
"async": "^3.2.3"
28+
"async": "^3.2.3",
29+
"node-fetch": "^3.2.0"
2930
}
3031
}

yarn.lock

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,11 @@
728728
dependencies:
729729
"assert-plus" "^1.0.0"
730730

731+
"data-uri-to-buffer@^4.0.0":
732+
"integrity" "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA=="
733+
"resolved" "https://npm.vexere.net/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz"
734+
"version" "4.0.0"
735+
731736
"data-urls@^1.0.0":
732737
"integrity" "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ=="
733738
"resolved" "https://npm.vexere.net/data-urls/-/data-urls-1.1.0.tgz"
@@ -1081,6 +1086,14 @@
10811086
dependencies:
10821087
"bser" "^2.0.0"
10831088

1089+
"fetch-blob@^3.1.2", "fetch-blob@^3.1.4":
1090+
"integrity" "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA=="
1091+
"resolved" "https://npm.vexere.net/fetch-blob/-/fetch-blob-3.1.4.tgz"
1092+
"version" "3.1.4"
1093+
dependencies:
1094+
"node-domexception" "^1.0.0"
1095+
"web-streams-polyfill" "^3.0.3"
1096+
10841097
"filename-regex@^2.0.0":
10851098
"integrity" "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
10861099
"resolved" "https://npm.vexere.net/filename-regex/-/filename-regex-2.0.1.tgz"
@@ -1163,6 +1176,13 @@
11631176
"combined-stream" "^1.0.6"
11641177
"mime-types" "^2.1.12"
11651178

1179+
"formdata-polyfill@^4.0.10":
1180+
"integrity" "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="
1181+
"resolved" "https://npm.vexere.net/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz"
1182+
"version" "4.0.10"
1183+
dependencies:
1184+
"fetch-blob" "^3.1.2"
1185+
11661186
"fragment-cache@^0.2.1":
11671187
"integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk="
11681188
"resolved" "https://npm.vexere.net/fragment-cache/-/fragment-cache-0.2.1.tgz"
@@ -2519,6 +2539,20 @@
25192539
"resolved" "https://npm.vexere.net/neo-async/-/neo-async-2.6.1.tgz"
25202540
"version" "2.6.1"
25212541

2542+
"node-domexception@^1.0.0":
2543+
"integrity" "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
2544+
"resolved" "https://npm.vexere.net/node-domexception/-/node-domexception-1.0.0.tgz"
2545+
"version" "1.0.0"
2546+
2547+
"node-fetch@^3.2.0":
2548+
"integrity" "sha512-8xeimMwMItMw8hRrOl3C9/xzU49HV/yE6ORew/l+dxWimO5A4Ra8ld2rerlJvc/O7et5Z1zrWsPX43v1QBjCxw=="
2549+
"resolved" "https://npm.vexere.net/node-fetch/-/node-fetch-3.2.0.tgz"
2550+
"version" "3.2.0"
2551+
dependencies:
2552+
"data-uri-to-buffer" "^4.0.0"
2553+
"fetch-blob" "^3.1.4"
2554+
"formdata-polyfill" "^4.0.10"
2555+
25222556
"node-int64@^0.4.0":
25232557
"integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
25242558
"resolved" "https://npm.vexere.net/node-int64/-/node-int64-0.4.0.tgz"
@@ -3758,6 +3792,11 @@
37583792
"exec-sh" "^0.2.0"
37593793
"minimist" "^1.2.0"
37603794

3795+
"web-streams-polyfill@^3.0.3":
3796+
"integrity" "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA=="
3797+
"resolved" "https://npm.vexere.net/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz"
3798+
"version" "3.2.0"
3799+
37613800
"webidl-conversions@^4.0.2":
37623801
"integrity" "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
37633802
"resolved" "https://npm.vexere.net/webidl-conversions/-/webidl-conversions-4.0.2.tgz"

0 commit comments

Comments
 (0)