mirror of
https://github.com/shuguangnet/Code-Master.git
synced 2025-01-23 16:08:45 +08:00
132 lines
4.0 KiB
TypeScript
132 lines
4.0 KiB
TypeScript
/* generated using openapi-typescript-codegen -- do not edit */
|
|
/* istanbul ignore file */
|
|
/* tslint:disable */
|
|
/* eslint-disable */
|
|
export class CancelError extends Error {
|
|
|
|
constructor(message: string) {
|
|
super(message);
|
|
this.name = 'CancelError';
|
|
}
|
|
|
|
public get isCancelled(): boolean {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
export interface OnCancel {
|
|
readonly isResolved: boolean;
|
|
readonly isRejected: boolean;
|
|
readonly isCancelled: boolean;
|
|
|
|
(cancelHandler: () => void): void;
|
|
}
|
|
|
|
export class CancelablePromise<T> implements Promise<T> {
|
|
#isResolved: boolean;
|
|
#isRejected: boolean;
|
|
#isCancelled: boolean;
|
|
readonly #cancelHandlers: (() => void)[];
|
|
readonly #promise: Promise<T>;
|
|
#resolve?: (value: T | PromiseLike<T>) => void;
|
|
#reject?: (reason?: any) => void;
|
|
|
|
constructor(
|
|
executor: (
|
|
resolve: (value: T | PromiseLike<T>) => void,
|
|
reject: (reason?: any) => void,
|
|
onCancel: OnCancel
|
|
) => void
|
|
) {
|
|
this.#isResolved = false;
|
|
this.#isRejected = false;
|
|
this.#isCancelled = false;
|
|
this.#cancelHandlers = [];
|
|
this.#promise = new Promise<T>((resolve, reject) => {
|
|
this.#resolve = resolve;
|
|
this.#reject = reject;
|
|
|
|
const onResolve = (value: T | PromiseLike<T>): void => {
|
|
if (this.#isResolved || this.#isRejected || this.#isCancelled) {
|
|
return;
|
|
}
|
|
this.#isResolved = true;
|
|
if (this.#resolve) this.#resolve(value);
|
|
};
|
|
|
|
const onReject = (reason?: any): void => {
|
|
if (this.#isResolved || this.#isRejected || this.#isCancelled) {
|
|
return;
|
|
}
|
|
this.#isRejected = true;
|
|
if (this.#reject) this.#reject(reason);
|
|
};
|
|
|
|
const onCancel = (cancelHandler: () => void): void => {
|
|
if (this.#isResolved || this.#isRejected || this.#isCancelled) {
|
|
return;
|
|
}
|
|
this.#cancelHandlers.push(cancelHandler);
|
|
};
|
|
|
|
Object.defineProperty(onCancel, 'isResolved', {
|
|
get: (): boolean => this.#isResolved,
|
|
});
|
|
|
|
Object.defineProperty(onCancel, 'isRejected', {
|
|
get: (): boolean => this.#isRejected,
|
|
});
|
|
|
|
Object.defineProperty(onCancel, 'isCancelled', {
|
|
get: (): boolean => this.#isCancelled,
|
|
});
|
|
|
|
return executor(onResolve, onReject, onCancel as OnCancel);
|
|
});
|
|
}
|
|
|
|
get [Symbol.toStringTag]() {
|
|
return "Cancellable Promise";
|
|
}
|
|
|
|
public then<TResult1 = T, TResult2 = never>(
|
|
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
|
|
onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null
|
|
): Promise<TResult1 | TResult2> {
|
|
return this.#promise.then(onFulfilled, onRejected);
|
|
}
|
|
|
|
public catch<TResult = never>(
|
|
onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null
|
|
): Promise<T | TResult> {
|
|
return this.#promise.catch(onRejected);
|
|
}
|
|
|
|
public finally(onFinally?: (() => void) | null): Promise<T> {
|
|
return this.#promise.finally(onFinally);
|
|
}
|
|
|
|
public cancel(): void {
|
|
if (this.#isResolved || this.#isRejected || this.#isCancelled) {
|
|
return;
|
|
}
|
|
this.#isCancelled = true;
|
|
if (this.#cancelHandlers.length) {
|
|
try {
|
|
for (const cancelHandler of this.#cancelHandlers) {
|
|
cancelHandler();
|
|
}
|
|
} catch (error) {
|
|
console.warn('Cancellation threw an error', error);
|
|
return;
|
|
}
|
|
}
|
|
this.#cancelHandlers.length = 0;
|
|
if (this.#reject) this.#reject(new CancelError('Request aborted'));
|
|
}
|
|
|
|
public get isCancelled(): boolean {
|
|
return this.#isCancelled;
|
|
}
|
|
}
|