asciitorium
Version:
an ASCII CLUI framework
37 lines (36 loc) • 1.11 kB
JavaScript
class RenderScheduler {
constructor() {
this.renderCallback = null;
this.renderPending = false;
}
static getInstance() {
if (!RenderScheduler.instance) {
RenderScheduler.instance = new RenderScheduler();
}
return RenderScheduler.instance;
}
setRenderCallback(cb) {
this.renderCallback = cb;
}
requestRender() {
// If a render is already queued, don't queue another
if (this.renderPending)
return;
this.renderPending = true;
// Queue render as a microtask to batch multiple render requests
// This ensures all synchronous state updates complete before rendering
queueMicrotask(() => this.executeRender());
}
executeRender() {
this.renderPending = false;
this.renderCallback?.();
}
}
// Export convenience functions that use the singleton
const scheduler = RenderScheduler.getInstance();
export function setRenderCallback(cb) {
scheduler.setRenderCallback(cb);
}
export function requestRender() {
scheduler.requestRender();
}