import {Response} from './Response'; export interface Cancellable { abort(): void; } export interface RequestPromiseParams { req: Cancellable; } export class RequestPromise implements Promise> { [Symbol.toStringTag]; private promise: Promise>; private params: RequestPromiseParams; constructor(executor: (resolve: (value?: Response | PromiseLike>) => void, reject: (reason?: any) => void) => void, params: RequestPromiseParams) { this.params = params; this.promise = new Promise(executor); } public then, TResult2 = never>(onfulfilled?: ((value: Response) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise { return this.promise.then(onfulfilled, onrejected); } public catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise | TResult> { return this.promise.catch(onrejected); } public finally(onfinally?: (() => void) | undefined | null): Promise> { return this.promise.finally(onfinally); } public cancel(): void { this.params.req.abort(); } }