aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/src/internal/util/Immediate.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rxjs/src/internal/util/Immediate.ts')
-rw-r--r--node_modules/rxjs/src/internal/util/Immediate.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/util/Immediate.ts b/node_modules/rxjs/src/internal/util/Immediate.ts
new file mode 100644
index 0000000..f01f546
--- /dev/null
+++ b/node_modules/rxjs/src/internal/util/Immediate.ts
@@ -0,0 +1,45 @@
+let nextHandle = 1;
+// The promise needs to be created lazily otherwise it won't be patched by Zones
+let resolved: Promise<any>;
+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;
+ if (!resolved) {
+ resolved = Promise.resolve();
+ }
+ 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;
+ }
+};
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage