@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
26 lines (25 loc) • 751 B
JavaScript
export default class PhasedScheduler {
phaseCallbacks = new Map();
phaseOrder = [];
constructor(...phaseOrder) {
this.phaseOrder = phaseOrder;
}
add(phase, callback) {
if (!this.phaseOrder.includes(phase)) {
throw new Error(`unknown phase ${phase}`);
}
let phaseCallbacks = this.phaseCallbacks.get(phase);
if (!phaseCallbacks) {
phaseCallbacks = [];
this.phaseCallbacks.set(phase, phaseCallbacks);
}
phaseCallbacks.push(callback);
}
run() {
for (const phaseName of this.phaseOrder) {
for (const callback of this.phaseCallbacks.get(phaseName) || []) {
callback();
}
}
}
}