@chassisjs/hermes
Version:
Production-Ready TypeScript Outbox Pattern
47 lines • 1.25 kB
JavaScript
import { assert } from './utils/assert.js';
export class CancellationPromise extends Promise {
_resolve;
_reject;
_state = 'pending';
constructor(executor = () => null) {
let _resolve = undefined;
let _reject = undefined;
super((resolve, reject) => {
executor(resolve, reject);
_resolve = resolve;
_reject = reject;
});
assert(_resolve);
assert(_reject);
this._resolve = _resolve;
this._reject = _reject;
}
reject(reason) {
this._state = 'rejected';
this._reject(reason);
}
resolve(value) {
this._state = 'resolved';
this._resolve(value);
}
get isResolved() {
return this._state === 'resolved';
}
get isRejected() {
return this._state === 'rejected';
}
get isPending() {
return this._state === 'pending';
}
static resolved(value) {
const promise = new CancellationPromise();
promise.resolve(value);
return promise;
}
static rejected(value) {
const promise = new CancellationPromise();
promise.reject(value);
return promise;
}
}
//# sourceMappingURL=CancellablePromise.js.map