typed-utilities
Version:
Strongly typed general purpose utilities
58 lines (46 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Deferred = void 0;
var _AsyncResult = require("./AsyncResult");
const defer = () => {
let state = _AsyncResult.AsyncResult.of.pending();
let innerResolve = null;
let innerReject = null;
const promise = new Promise((resolve, reject) => {
innerResolve = resolve;
innerReject = reject;
});
const resolve = value => {
if (!_AsyncResult.AsyncResult.is.pending(state)) {
throw new Error(`Deferred already settled`);
}
if (!innerResolve) {
throw new Error(`innerResolve is not defined`);
}
state = _AsyncResult.AsyncResult.of.resolved(value);
innerResolve(value);
};
const reject = error => {
if (!_AsyncResult.AsyncResult.is.pending(state)) {
throw new Error(`Deferred already settled`);
}
if (!innerReject) {
throw new Error(`innerResolve is not defined`);
}
state = _AsyncResult.AsyncResult.of.rejected(error);
innerReject(error);
};
return {
state: () => state,
reject,
resolve,
await: () => promise
};
};
const Deferred = {
defer
};
exports.Deferred = Deferred;
//# sourceMappingURL=Deferred.js.map