scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
45 lines (39 loc) • 1.08 kB
text/typescript
// rejecting promises with plain objects instead of errors
export class Deferred<ValueType = void> implements PromiseLike<ValueType> {
promise: Promise<ValueType>;
resolve!: (value: ValueType) => void;
reject!: (error: Error) => void;
private settled?: boolean;
constructor() {
this.promise = new Promise(
(
resolveFn: (value: ValueType) => void,
rejectFn: (error: Error) => void
) => {
this.resolve = (value) => {
this.settled = true;
resolveFn(value);
};
this.reject = (error) => {
this.settled = true;
rejectFn(error);
};
}
);
}
isPending() {
return !this.settled;
}
then<TResult1 = ValueType, TResult2 = never>(
onfulfilled?:
| ((value: ValueType) => TResult1 | PromiseLike<TResult1>)
| undefined
| null,
onrejected?:
| ((reason: unknown) => TResult2 | PromiseLike<TResult2>)
| undefined
| null
): Promise<TResult1 | TResult2> {
return this.promise.then(onfulfilled, onrejected);
}
}