@heroku-cli/command
Version:
base class for Heroku CLI commands
29 lines (28 loc) • 663 B
JavaScript
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();
}
});
}
}