aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts')
-rw-r--r--node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts52
1 files changed, 52 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts b/node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts
new file mode 100644
index 0000000..b05e2e3
--- /dev/null
+++ b/node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts
@@ -0,0 +1,52 @@
+import { Scheduler } from '../Scheduler';
+import { Action } from './Action';
+import { AsyncAction } from './AsyncAction';
+import { TimerHandle } from './timerHandle';
+
+export class AsyncScheduler extends Scheduler {
+ public actions: Array<AsyncAction<any>> = [];
+ /**
+ * A flag to indicate whether the Scheduler is currently executing a batch of
+ * queued actions.
+ * @internal
+ */
+ public _active: boolean = false;
+ /**
+ * An internal ID used to track the latest asynchronous task such as those
+ * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and
+ * others.
+ * @internal
+ */
+ public _scheduled: TimerHandle | undefined;
+
+ constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {
+ super(SchedulerAction, now);
+ }
+
+ public flush(action: AsyncAction<any>): void {
+ const { actions } = this;
+
+ if (this._active) {
+ actions.push(action);
+ return;
+ }
+
+ let error: any;
+ this._active = true;
+
+ do {
+ if ((error = action.execute(action.state, action.delay))) {
+ break;
+ }
+ } while ((action = actions.shift()!)); // exhaust the scheduler queue
+
+ this._active = false;
+
+ if (error) {
+ while ((action = actions.shift()!)) {
+ action.unsubscribe();
+ }
+ throw error;
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage