@typed/future
Version:
Asynchronous Future Values
29 lines • 1.01 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.all = void 0;
const disposable_1 = require("@typed/disposable");
const env_1 = require("@typed/env");
const fork_1 = require("./fork");
const Future_1 = require("./Future");
exports.all = (futures) => Future_1.Future.create((reject, resolve, environment) => {
const hasValues = Array(futures.length).fill(false);
const values = Array(futures.length);
const disposable = disposable_1.Disposable.lazy();
function left(a) {
disposable.dispose();
return reject(a);
}
function right(b, index) {
hasValues[index] = true;
values[index] = b;
if (hasValues.every(Boolean)) {
return resolve(values);
}
return disposable_1.Disposable.None;
}
futures.forEach((f, i) => {
disposable.addDisposable(fork_1.fork(left, (b) => right(b, i), env_1.provide(f, environment)));
});
return disposable;
});
//# sourceMappingURL=all.js.map
;