You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
	
	
							105 lines
						
					
					
						
							3.9 KiB
						
					
					
				"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
 |