@typed/future
Version:
Asynchronous Future Values
26 lines • 864 B
JavaScript
import { Disposable } from '@typed/disposable';
import { provide } from '@typed/env';
import { fork } from './fork';
import { Future } from './Future';
export const all = (futures) => Future.create((reject, resolve, environment) => {
const hasValues = Array(futures.length).fill(false);
const values = Array(futures.length);
const disposable = 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.None;
}
futures.forEach((f, i) => {
disposable.addDisposable(fork(left, (b) => right(b, i), provide(f, environment)));
});
return disposable;
});
//# sourceMappingURL=all.js.map