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.

window.js 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { Subject } from '../Subject';
  2. import { OuterSubscriber } from '../OuterSubscriber';
  3. import { subscribeToResult } from '../util/subscribeToResult';
  4. export function window(windowBoundaries) {
  5. return function windowOperatorFunction(source) {
  6. return source.lift(new WindowOperator(windowBoundaries));
  7. };
  8. }
  9. class WindowOperator {
  10. constructor(windowBoundaries) {
  11. this.windowBoundaries = windowBoundaries;
  12. }
  13. call(subscriber, source) {
  14. const windowSubscriber = new WindowSubscriber(subscriber);
  15. const sourceSubscription = source.subscribe(windowSubscriber);
  16. if (!sourceSubscription.closed) {
  17. windowSubscriber.add(subscribeToResult(windowSubscriber, this.windowBoundaries));
  18. }
  19. return sourceSubscription;
  20. }
  21. }
  22. class WindowSubscriber extends OuterSubscriber {
  23. constructor(destination) {
  24. super(destination);
  25. this.window = new Subject();
  26. destination.next(this.window);
  27. }
  28. notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  29. this.openWindow();
  30. }
  31. notifyError(error, innerSub) {
  32. this._error(error);
  33. }
  34. notifyComplete(innerSub) {
  35. this._complete();
  36. }
  37. _next(value) {
  38. this.window.next(value);
  39. }
  40. _error(err) {
  41. this.window.error(err);
  42. this.destination.error(err);
  43. }
  44. _complete() {
  45. this.window.complete();
  46. this.destination.complete();
  47. }
  48. _unsubscribe() {
  49. this.window = null;
  50. }
  51. openWindow() {
  52. const prevWindow = this.window;
  53. if (prevWindow) {
  54. prevWindow.complete();
  55. }
  56. const destination = this.destination;
  57. const newWindow = this.window = new Subject();
  58. destination.next(newWindow);
  59. }
  60. }
  61. //# sourceMappingURL=window.js.map