championswimmer/vuex-persist

View on GitHub
src/SimplePromiseQueue.ts

Summary

Maintainability
A
0 mins
Test Coverage
// tslint:disable: variable-name
export default class SimplePromiseQueue {
  private readonly _queue: Array<Promise<void>> = []
  private _flushing = false

  public enqueue(promise: Promise<void>) {
    this._queue.push(promise)
    if (!this._flushing) { return this.flushQueue() }
    return Promise.resolve()
  }

  private flushQueue() {
    this._flushing = true

    const chain = (): Promise<void> | void => {
      const nextTask = this._queue.shift()
      if (nextTask) {
        return nextTask.then(chain)
      } else {
        this._flushing = false
      }
    }
    return Promise.resolve(chain())
  }
}