parallel.js

This commit is contained in:
KoroLion 2021-04-29 22:31:44 +03:00
parent f21719db80
commit 9a20e41ec6
2 changed files with 52 additions and 0 deletions

52
src/parallel.js Normal file
View File

@ -0,0 +1,52 @@
// Параллельные вычисления
const WAIT_CHECK_TIME = 10;
function parallel(promises, callback) {
const result = [];
let done = 0;
const setResult = (i, res) => {
done++;
result[i] = res;
}
for (let i in promises) {
const promise = promises[i];
const res = promise((res) => setResult(i, res));
if (res) {
setResult(i, res);
}
}
// if all sync
if (done === promises.length) {
callback(result);
return;
}
// if at least one is async
const waitInterval = setInterval(() => {
if (done === promises.length) {
clearInterval(waitInterval);
callback(result);
}
}, WAIT_CHECK_TIME);
}
parallel([
function (resolve) {
setTimeout(function () {
resolve(10);
}, 50);
},
function () {
return 5;
},
function (resolve) {
setTimeout(function () {
resolve(0);
}, 10)
}
], function (results) {
console.log(results); // [10, 5, 0]
});