@typed/future
Version:
Asynchronous Future Values
33 lines • 1.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Future = void 0;
const disposable_1 = require("@typed/disposable");
const either_1 = require("@typed/either");
const env_1 = require("@typed/env");
const lambda_1 = require("@typed/lambda");
var Future;
(function (Future) {
Future.of = (value) => env_1.Pure.of(either_1.Either.of(value));
Future.create = (fn) => (e) => env_1.Resume.create((cb) => {
const ifNotResolved = createIfNotResolved();
return fn(ifNotResolved(lambda_1.pipe(either_1.Left.of, cb)), ifNotResolved(lambda_1.pipe(either_1.Right.of, cb)), e);
});
Future.fromPromise = (promise) => Future.create((reject, resolve) => {
const disposable = disposable_1.Disposable.lazy();
promise().then((a) => disposable.addDisposable(resolve(a)), (e) => disposable.addDisposable(reject(e)));
return disposable;
});
})(Future = exports.Future || (exports.Future = {}));
function createIfNotResolved() {
let resolved = false;
return (fn) => {
return (value) => {
if (!resolved) {
resolved = true;
return fn(value);
}
return disposable_1.Disposable.None;
};
};
}
//# sourceMappingURL=Future.js.map