parallel.js
This commit is contained in:
parent
f21719db80
commit
9a20e41ec6
52
src/parallel.js
Normal file
52
src/parallel.js
Normal 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]
|
||||
});
|
Loading…
Reference in New Issue
Block a user