105 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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 async_1 = require("../scheduler/async");
 | |
| var isDate_1 = require("../util/isDate");
 | |
| var Subscriber_1 = require("../Subscriber");
 | |
| var Notification_1 = require("../Notification");
 | |
| function delay(delay, scheduler) {
 | |
|     if (scheduler === void 0) { scheduler = async_1.async; }
 | |
|     var absoluteDelay = isDate_1.isDate(delay);
 | |
|     var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
 | |
|     return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
 | |
| }
 | |
| exports.delay = delay;
 | |
| var DelayOperator = (function () {
 | |
|     function DelayOperator(delay, scheduler) {
 | |
|         this.delay = delay;
 | |
|         this.scheduler = scheduler;
 | |
|     }
 | |
|     DelayOperator.prototype.call = function (subscriber, source) {
 | |
|         return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
 | |
|     };
 | |
|     return DelayOperator;
 | |
| }());
 | |
| var DelaySubscriber = (function (_super) {
 | |
|     __extends(DelaySubscriber, _super);
 | |
|     function DelaySubscriber(destination, delay, scheduler) {
 | |
|         var _this = _super.call(this, destination) || this;
 | |
|         _this.delay = delay;
 | |
|         _this.scheduler = scheduler;
 | |
|         _this.queue = [];
 | |
|         _this.active = false;
 | |
|         _this.errored = false;
 | |
|         return _this;
 | |
|     }
 | |
|     DelaySubscriber.dispatch = function (state) {
 | |
|         var source = state.source;
 | |
|         var queue = source.queue;
 | |
|         var scheduler = state.scheduler;
 | |
|         var destination = state.destination;
 | |
|         while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
 | |
|             queue.shift().notification.observe(destination);
 | |
|         }
 | |
|         if (queue.length > 0) {
 | |
|             var delay_1 = Math.max(0, queue[0].time - scheduler.now());
 | |
|             this.schedule(state, delay_1);
 | |
|         }
 | |
|         else {
 | |
|             this.unsubscribe();
 | |
|             source.active = false;
 | |
|         }
 | |
|     };
 | |
|     DelaySubscriber.prototype._schedule = function (scheduler) {
 | |
|         this.active = true;
 | |
|         var destination = this.destination;
 | |
|         destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
 | |
|             source: this, destination: this.destination, scheduler: scheduler
 | |
|         }));
 | |
|     };
 | |
|     DelaySubscriber.prototype.scheduleNotification = function (notification) {
 | |
|         if (this.errored === true) {
 | |
|             return;
 | |
|         }
 | |
|         var scheduler = this.scheduler;
 | |
|         var message = new DelayMessage(scheduler.now() + this.delay, notification);
 | |
|         this.queue.push(message);
 | |
|         if (this.active === false) {
 | |
|             this._schedule(scheduler);
 | |
|         }
 | |
|     };
 | |
|     DelaySubscriber.prototype._next = function (value) {
 | |
|         this.scheduleNotification(Notification_1.Notification.createNext(value));
 | |
|     };
 | |
|     DelaySubscriber.prototype._error = function (err) {
 | |
|         this.errored = true;
 | |
|         this.queue = [];
 | |
|         this.destination.error(err);
 | |
|         this.unsubscribe();
 | |
|     };
 | |
|     DelaySubscriber.prototype._complete = function () {
 | |
|         this.scheduleNotification(Notification_1.Notification.createComplete());
 | |
|         this.unsubscribe();
 | |
|     };
 | |
|     return DelaySubscriber;
 | |
| }(Subscriber_1.Subscriber));
 | |
| var DelayMessage = (function () {
 | |
|     function DelayMessage(time, notification) {
 | |
|         this.time = time;
 | |
|         this.notification = notification;
 | |
|     }
 | |
|     return DelayMessage;
 | |
| }());
 | |
| //# sourceMappingURL=delay.js.map
 | 
