import { Executor } from './Executor' import { Request, Response } from './Task' import { LinkedList } from './LinkedList' export interface Worker { start(): Promise } export type Callback = (result: Response) => void export class QueuedWorker implements Worker { constructor( protected executor: Executor, protected taskQueue: LinkedList>, protected callback: Callback, ) { } async start() { let task = this.taskQueue.shift() while (task !== undefined) { try { const result = await this.executor.execute(task) this.callback({ id: task.id, result, type: 'success', }) } catch (err) { this.callback({ id: task.id, error: err, type: 'error', }) } task = this.taskQueue.shift() } } }