| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | "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
 |