TelegramPWA/src/api/gramjs/ChatAbortController.ts
2024-02-06 16:54:37 +01:00

26 lines
743 B
TypeScript

import type { ThreadId } from '../../types';
export class ChatAbortController extends AbortController {
private threads = new Map<ThreadId, AbortController>();
public getThreadSignal(threadId: ThreadId): AbortSignal {
let controller = this.threads.get(threadId);
if (!controller) {
controller = new AbortController();
this.threads.set(threadId, controller);
}
return controller.signal;
}
public abortThread(threadId: ThreadId, reason?: string): void {
this.threads.get(threadId)?.abort(reason);
this.threads.delete(threadId);
}
public abort(reason?: string): void {
super.abort(reason);
this.threads.forEach((controller) => controller.abort(reason));
this.threads.clear();
}
}