debounce.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.debounce = void 0;
  4. var lift_1 = require("../util/lift");
  5. var noop_1 = require("../util/noop");
  6. var OperatorSubscriber_1 = require("./OperatorSubscriber");
  7. var innerFrom_1 = require("../observable/innerFrom");
  8. function debounce(durationSelector) {
  9. return lift_1.operate(function (source, subscriber) {
  10. var hasValue = false;
  11. var lastValue = null;
  12. var durationSubscriber = null;
  13. var emit = function () {
  14. durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();
  15. durationSubscriber = null;
  16. if (hasValue) {
  17. hasValue = false;
  18. var value = lastValue;
  19. lastValue = null;
  20. subscriber.next(value);
  21. }
  22. };
  23. source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {
  24. durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe();
  25. hasValue = true;
  26. lastValue = value;
  27. durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, emit, noop_1.noop);
  28. innerFrom_1.innerFrom(durationSelector(value)).subscribe(durationSubscriber);
  29. }, function () {
  30. emit();
  31. subscriber.complete();
  32. }, undefined, function () {
  33. lastValue = durationSubscriber = null;
  34. }));
  35. });
  36. }
  37. exports.debounce = debounce;
  38. //# sourceMappingURL=debounce.js.map