aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js')
-rw-r--r--node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js b/node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js
new file mode 100644
index 0000000..e0774f3
--- /dev/null
+++ b/node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js
@@ -0,0 +1,82 @@
+import { Action } from './Action';
+import { intervalProvider } from './intervalProvider';
+import { arrRemove } from '../util/arrRemove';
+export class AsyncAction extends Action {
+ constructor(scheduler, work) {
+ super(scheduler, work);
+ this.scheduler = scheduler;
+ this.work = work;
+ this.pending = false;
+ }
+ schedule(state, delay = 0) {
+ var _a;
+ if (this.closed) {
+ return this;
+ }
+ this.state = state;
+ const id = this.id;
+ const scheduler = this.scheduler;
+ if (id != null) {
+ this.id = this.recycleAsyncId(scheduler, id, delay);
+ }
+ this.pending = true;
+ this.delay = delay;
+ this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);
+ return this;
+ }
+ requestAsyncId(scheduler, _id, delay = 0) {
+ return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);
+ }
+ recycleAsyncId(_scheduler, id, delay = 0) {
+ if (delay != null && this.delay === delay && this.pending === false) {
+ return id;
+ }
+ if (id != null) {
+ intervalProvider.clearInterval(id);
+ }
+ return undefined;
+ }
+ execute(state, delay) {
+ if (this.closed) {
+ return new Error('executing a cancelled action');
+ }
+ this.pending = false;
+ const error = this._execute(state, delay);
+ if (error) {
+ return error;
+ }
+ else if (this.pending === false && this.id != null) {
+ this.id = this.recycleAsyncId(this.scheduler, this.id, null);
+ }
+ }
+ _execute(state, _delay) {
+ let errored = false;
+ let errorValue;
+ try {
+ this.work(state);
+ }
+ catch (e) {
+ errored = true;
+ errorValue = e ? e : new Error('Scheduled action threw falsy error');
+ }
+ if (errored) {
+ this.unsubscribe();
+ return errorValue;
+ }
+ }
+ unsubscribe() {
+ if (!this.closed) {
+ const { id, scheduler } = this;
+ const { actions } = scheduler;
+ this.work = this.state = this.scheduler = null;
+ this.pending = false;
+ arrRemove(actions, this);
+ if (id != null) {
+ this.id = this.recycleAsyncId(scheduler, id, null);
+ }
+ this.delay = null;
+ super.unsubscribe();
+ }
+ }
+}
+//# sourceMappingURL=AsyncAction.js.map \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage