Files
pixelheros/extensions/Excel转JSON/node_modules/atomically/src/utils/scheduler.ts
walkpan 8f57f57c1d dd
2024-08-18 23:38:55 +08:00

61 lines
818 B
TypeScript

/* IMPORT */
import {Disposer} from '../types';
/* VARIABLES */
const Queues: Record<string, Function[] | undefined> = {};
/* SCHEDULER */
//TODO: Maybe publish this as a standalone package
const Scheduler = {
next: ( id: string ): void => {
const queue = Queues[id];
if ( !queue ) return;
queue.shift ();
const job = queue[0];
if ( job ) {
job ( () => Scheduler.next ( id ) );
} else {
delete Queues[id];
}
},
schedule: ( id: string ): Promise<Disposer> => {
return new Promise ( resolve => {
let queue = Queues[id];
if ( !queue ) queue = Queues[id] = [];
queue.push ( resolve );
if ( queue.length > 1 ) return;
resolve ( () => Scheduler.next ( id ) );
});
}
};
/* EXPORT */
export default Scheduler;