1234567891011121314151617181920212223242526272829303132333435363738394041 |
- let nextHandle = 1;
- const RESOLVED = (() => Promise.resolve())();
- const activeHandles: { [key: number]: any } = {};
-
- /**
- * Finds the handle in the list of active handles, and removes it.
- * Returns `true` if found, `false` otherwise. Used both to clear
- * Immediate scheduled tasks, and to identify if a task should be scheduled.
- */
- function findAndClearHandle(handle: number): boolean {
- if (handle in activeHandles) {
- delete activeHandles[handle];
- return true;
- }
- return false;
- }
-
- /**
- * Helper functions to schedule and unschedule microtasks.
- */
- export const Immediate = {
- setImmediate(cb: () => void): number {
- const handle = nextHandle++;
- activeHandles[handle] = true;
- RESOLVED.then(() => findAndClearHandle(handle) && cb());
- return handle;
- },
-
- clearImmediate(handle: number): void {
- findAndClearHandle(handle);
- },
- };
-
- /**
- * Used for internal testing purposes only. Do not export from library.
- */
- export const TestTools = {
- pending() {
- return Object.keys(activeHandles).length;
- }
- };
|