Ohm-Management - Projektarbeit B-ME
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

debounce.js 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { OuterSubscriber } from '../OuterSubscriber';
  2. import { subscribeToResult } from '../util/subscribeToResult';
  3. export function debounce(durationSelector) {
  4. return (source) => source.lift(new DebounceOperator(durationSelector));
  5. }
  6. class DebounceOperator {
  7. constructor(durationSelector) {
  8. this.durationSelector = durationSelector;
  9. }
  10. call(subscriber, source) {
  11. return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
  12. }
  13. }
  14. class DebounceSubscriber extends OuterSubscriber {
  15. constructor(destination, durationSelector) {
  16. super(destination);
  17. this.durationSelector = durationSelector;
  18. this.hasValue = false;
  19. this.durationSubscription = null;
  20. }
  21. _next(value) {
  22. try {
  23. const result = this.durationSelector.call(this, value);
  24. if (result) {
  25. this._tryNext(value, result);
  26. }
  27. }
  28. catch (err) {
  29. this.destination.error(err);
  30. }
  31. }
  32. _complete() {
  33. this.emitValue();
  34. this.destination.complete();
  35. }
  36. _tryNext(value, duration) {
  37. let subscription = this.durationSubscription;
  38. this.value = value;
  39. this.hasValue = true;
  40. if (subscription) {
  41. subscription.unsubscribe();
  42. this.remove(subscription);
  43. }
  44. subscription = subscribeToResult(this, duration);
  45. if (subscription && !subscription.closed) {
  46. this.add(this.durationSubscription = subscription);
  47. }
  48. }
  49. notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  50. this.emitValue();
  51. }
  52. notifyComplete() {
  53. this.emitValue();
  54. }
  55. emitValue() {
  56. if (this.hasValue) {
  57. const value = this.value;
  58. const subscription = this.durationSubscription;
  59. if (subscription) {
  60. this.durationSubscription = null;
  61. subscription.unsubscribe();
  62. this.remove(subscription);
  63. }
  64. this.value = null;
  65. this.hasValue = false;
  66. super._next(value);
  67. }
  68. }
  69. }
  70. //# sourceMappingURL=debounce.js.map