| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- "use strict";
 
- var __extends = (this && this.__extends) || (function () {
 
-     var extendStatics = function (d, b) {
 
-         extendStatics = Object.setPrototypeOf ||
 
-             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 
-             function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
 
-         return extendStatics(d, b);
 
-     }
 
-     return function (d, b) {
 
-         extendStatics(d, b);
 
-         function __() { this.constructor = d; }
 
-         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 
-     };
 
- })();
 
- Object.defineProperty(exports, "__esModule", { value: true });
 
- var Action_1 = require("./Action");
 
- var AsyncAction = (function (_super) {
 
-     __extends(AsyncAction, _super);
 
-     function AsyncAction(scheduler, work) {
 
-         var _this = _super.call(this, scheduler, work) || this;
 
-         _this.scheduler = scheduler;
 
-         _this.work = work;
 
-         _this.pending = false;
 
-         return _this;
 
-     }
 
-     AsyncAction.prototype.schedule = function (state, delay) {
 
-         if (delay === void 0) { delay = 0; }
 
-         if (this.closed) {
 
-             return this;
 
-         }
 
-         this.state = state;
 
-         var id = this.id;
 
-         var scheduler = this.scheduler;
 
-         if (id != null) {
 
-             this.id = this.recycleAsyncId(scheduler, id, delay);
 
-         }
 
-         this.pending = true;
 
-         this.delay = delay;
 
-         this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
 
-         return this;
 
-     };
 
-     AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
 
-         if (delay === void 0) { delay = 0; }
 
-         return setInterval(scheduler.flush.bind(scheduler, this), delay);
 
-     };
 
-     AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
 
-         if (delay === void 0) { delay = 0; }
 
-         if (delay !== null && this.delay === delay && this.pending === false) {
 
-             return id;
 
-         }
 
-         clearInterval(id);
 
-         return undefined;
 
-     };
 
-     AsyncAction.prototype.execute = function (state, delay) {
 
-         if (this.closed) {
 
-             return new Error('executing a cancelled action');
 
-         }
 
-         this.pending = false;
 
-         var 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);
 
-         }
 
-     };
 
-     AsyncAction.prototype._execute = function (state, delay) {
 
-         var errored = false;
 
-         var errorValue = undefined;
 
-         try {
 
-             this.work(state);
 
-         }
 
-         catch (e) {
 
-             errored = true;
 
-             errorValue = !!e && e || new Error(e);
 
-         }
 
-         if (errored) {
 
-             this.unsubscribe();
 
-             return errorValue;
 
-         }
 
-     };
 
-     AsyncAction.prototype._unsubscribe = function () {
 
-         var id = this.id;
 
-         var scheduler = this.scheduler;
 
-         var actions = scheduler.actions;
 
-         var index = actions.indexOf(this);
 
-         this.work = null;
 
-         this.state = null;
 
-         this.pending = false;
 
-         this.scheduler = null;
 
-         if (index !== -1) {
 
-             actions.splice(index, 1);
 
-         }
 
-         if (id != null) {
 
-             this.id = this.recycleAsyncId(scheduler, id, null);
 
-         }
 
-         this.delay = null;
 
-     };
 
-     return AsyncAction;
 
- }(Action_1.Action));
 
- exports.AsyncAction = AsyncAction;
 
- //# sourceMappingURL=AsyncAction.js.map
 
 
  |