@reactivex/rxjs
Version:
Reactive Extensions for modern JavaScript
69 lines • 2.63 kB
JavaScript
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
define(["require", "exports", '../scheduler/async', '../Subscriber'], function (require, exports, async_1, Subscriber_1) {
"use strict";
/**
* @param delay
* @param scheduler
* @return {Observable<R>|WebSocketSubject<T>|Observable<T>}
* @method auditTime
* @owner Observable
*/
function auditTime(delay, scheduler) {
if (scheduler === void 0) { scheduler = async_1.async; }
return this.lift(new AuditTimeOperator(delay, scheduler));
}
exports.auditTime = auditTime;
var AuditTimeOperator = (function () {
function AuditTimeOperator(delay, scheduler) {
this.delay = delay;
this.scheduler = scheduler;
}
AuditTimeOperator.prototype.call = function (subscriber, source) {
return source._subscribe(new AuditTimeSubscriber(subscriber, this.delay, this.scheduler));
};
return AuditTimeOperator;
}());
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var AuditTimeSubscriber = (function (_super) {
__extends(AuditTimeSubscriber, _super);
function AuditTimeSubscriber(destination, delay, scheduler) {
_super.call(this, destination);
this.delay = delay;
this.scheduler = scheduler;
this.hasValue = false;
}
AuditTimeSubscriber.prototype._next = function (value) {
this.value = value;
this.hasValue = true;
if (!this.throttled) {
this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.delay, this));
}
};
AuditTimeSubscriber.prototype.clearThrottle = function () {
var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
if (throttled) {
this.remove(throttled);
this.throttled = null;
throttled.unsubscribe();
}
if (hasValue) {
this.value = null;
this.hasValue = false;
this.destination.next(value);
}
};
return AuditTimeSubscriber;
}(Subscriber_1.Subscriber));
function dispatchNext(subscriber) {
subscriber.clearThrottle();
}
});
//# sourceMappingURL=auditTime.js.map