@lifaon/rx-js-light
Version:
Blazing fast Observables
44 lines (43 loc) • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.throttleTimeObservable = void 0;
var create_timeout_1 = require("../../../../../../misc/timer/create-timeout.cjs");
function throttleTimeObservable(subscribe, duration, _a) {
var _b = _a === void 0 ? {} : _a, _c = _b.leading, leading = _c === void 0 ? true : _c, _d = _b.trailing, trailing = _d === void 0 ? true : _d;
return function (emit) {
var lastSendValueTime = leading ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY;
var abortTimeout = null;
var trailingValue;
var _emit = function (value) {
lastSendValueTime = Date.now();
emit(value);
};
var unsubscribe = subscribe(function (value) {
var elapsedTime = Math.max(0, Date.now() - lastSendValueTime);
if (elapsedTime >= duration) {
if (abortTimeout !== null) {
abortTimeout();
abortTimeout = null;
}
_emit(value);
} else if (trailing) {
trailingValue = value;
if (abortTimeout === null) {
abortTimeout = (0, create_timeout_1.createTimeout)(function () {
abortTimeout = null;
_emit(trailingValue);
}, duration - elapsedTime);
}
}
});
return function () {
unsubscribe();
if (abortTimeout !== null) {
abortTimeout();
}
};
};
}
exports.throttleTimeObservable = throttleTimeObservable;