UNPKG

@heroku-cli/command

Version:
29 lines (28 loc) 663 B
export class Mutex { busy = false; queue = []; dequeue() { this.busy = true; const next = this.queue.shift(); if (next) { return this.execute(next); } this.busy = false; } execute(record) { const [task, resolve, reject] = record; return task() .then(resolve, reject) .then(() => { this.dequeue(); }); } synchronize(task) { return new Promise((resolve, reject) => { this.queue.push([task, resolve, reject]); if (!this.busy) { this.dequeue(); } }); } }