UNPKG

@typed/future

Version:
30 lines 1.09 kB
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