16 lines · 431 B · TypeScript
RawDownload
/** * Runs asynchronous operations in call order while keeping the queue usable * after an individual operation rejects. */export class SerializedAsyncQueue {  private tail: Promise<void> = Promise.resolve();   run<T>(operation: () => Promise<T>): Promise<T> {    const result = this.tail.then(operation, operation);    this.tail = result.then(      () => undefined,      () => undefined,    );    return result;  }}