debounceTime.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.debounceTime = void 0;
  4. var async_1 = require("../scheduler/async");
  5. var lift_1 = require("../util/lift");
  6. var OperatorSubscriber_1 = require("./OperatorSubscriber");
  7. function debounceTime(dueTime, scheduler) {
  8. if (scheduler === void 0) { scheduler = async_1.asyncScheduler; }
  9. return lift_1.operate(function (source, subscriber) {
  10. var activeTask = null;
  11. var lastValue = null;
  12. var lastTime = null;
  13. var emit = function () {
  14. if (activeTask) {
  15. activeTask.unsubscribe();
  16. activeTask = null;
  17. var value = lastValue;
  18. lastValue = null;
  19. subscriber.next(value);
  20. }
  21. };
  22. function emitWhenIdle() {
  23. var targetTime = lastTime + dueTime;
  24. var now = scheduler.now();
  25. if (now < targetTime) {
  26. activeTask = this.schedule(undefined, targetTime - now);
  27. subscriber.add(activeTask);
  28. return;
  29. }
  30. emit();
  31. }
  32. source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {
  33. lastValue = value;
  34. lastTime = scheduler.now();
  35. if (!activeTask) {
  36. activeTask = scheduler.schedule(emitWhenIdle, dueTime);
  37. subscriber.add(activeTask);
  38. }
  39. }, function () {
  40. emit();
  41. subscriber.complete();
  42. }, undefined, function () {
  43. lastValue = activeTask = null;
  44. }));
  45. });
  46. }
  47. exports.debounceTime = debounceTime;
  48. //# sourceMappingURL=debounceTime.js.map