@typed/future
Version:
Asynchronous Future Values
30 lines • 1.09 kB
JavaScript
import { Disposable } from '@typed/disposable';
import { Either, Left, Right } from '@typed/either';
import { Pure, Resume } from '@typed/env';
import { pipe } from '@typed/lambda';
export var Future;
(function (Future) {
Future.of = (value) => Pure.of(Either.of(value));
Future.create = (fn) => (e) => Resume.create((cb) => {
const ifNotResolved = createIfNotResolved();
return fn(ifNotResolved(pipe(Left.of, cb)), ifNotResolved(pipe(Right.of, cb)), e);
});
Future.fromPromise = (promise) => Future.create((reject, resolve) => {
const disposable = Disposable.lazy();
promise().then((a) => disposable.addDisposable(resolve(a)), (e) => disposable.addDisposable(reject(e)));
return disposable;
});
})(Future || (Future = {}));
function createIfNotResolved() {
let resolved = false;
return (fn) => {
return (value) => {
if (!resolved) {
resolved = true;
return fn(value);
}
return Disposable.None;
};
};
}
//# sourceMappingURL=Future.js.map