Guest User

Untitled

a guest
Apr 25th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. var button = document.getElementById('button');
  2.  
  3. function Observable(forEach) {
  4. this._forEach = forEach;
  5. }
  6.  
  7. // TWO POSSIBILITIES TO CALL AN OBSERVABLE
  8.  
  9. /*
  10. obser.forEach(x => ...., e=>......, () => .....);
  11. observer.forEach({ onNext: x => ......, onError: e => ....., onCompleted: () => .....})
  12. */
  13. Observable.prototype = {
  14. forEach: function(onNext, onError, onCompleted) {
  15. // are they passing in functions
  16. if (typeof onNext === 'function') {
  17. return this._forEach({
  18. onNext: onNext,
  19. onError: onError || function() {},
  20. onCompleted: onCompleted || function() {}
  21. })
  22. }
  23. else {
  24. // are they passing an Observer
  25. // onNext is { onNext: () =>, onError: () => ...}
  26. return this.forEach(onNext);
  27. }
  28. },
  29. map: function(projectionFunction) {
  30. var self = this;
  31. // mapped observable
  32. return new Observable(function forEach(observer) {
  33. return self.forEach(
  34. function onNext(x) { observer.onNext(projectionFunction(x)); },
  35. function onError(e) { observer.onError(e); },
  36. function onCompleted() {observer.onCompleted(); })
  37. });
  38. },
  39. filter: function(predicateFunction) {
  40. // this is the observable that make the map, filter, reduce, etc call
  41. var self = this;
  42. // filter observable
  43. return new Observable(function forEach(observer) {
  44. return self.forEach(
  45. x => { if (predicateFunction(x)) observer.onNext(x); },
  46. e => observer.onError(e),
  47. () => observer.onCompleted()
  48. )
  49. });
  50. },
  51. take: function(num) {
  52. // Reference to source observable
  53. var self = this;
  54. // Take observable
  55. return new Observable(function forEach(observer) {
  56. var counter = 0,
  57. subscription = self.forEach(
  58. function onNext(value) {
  59. observer.onNext(value);
  60. counter++;
  61. if (counter === num) {
  62. observer.onCompleted();
  63. subscription.dispose();
  64. }
  65. },
  66. error => observer.onError(error),
  67. () => observer.onCompleted()
  68. )
  69. });
  70. }
  71. }
  72.  
  73. //Creating an observable from a event based API
  74. Observable.fromEvent = function(dom, eventName) {
  75. return new Observable(function forEach(observer) {
  76. var handler = (event) => observer.onNext(event);
  77.  
  78. dom.addEventListener(eventName, handler);
  79. // Subscription
  80. return {
  81. dispose: () => {
  82. dom.removeEventListener(eventName, handler);
  83. }
  84. };
  85. });
  86. };
  87.  
  88. // DEPRECATED FUNCTION Object.observe.
  89. // USING RX Observable.create method
  90. // var Observable = Rx.Observable;
  91. // Observable.observations = (obj) => {
  92. // return Observable.create(observer => {
  93. // var handler = (event) => observer.onNext(event);
  94.  
  95. // Object.observe(obj, handler);
  96.  
  97. // //subscription
  98. // // the rx libray wraps the subscription for us, we just pass the property for 'un-hook' the event
  99. // return () => Object.unobserve(obj, handler);
  100. // });
  101. // };
  102.  
  103.  
  104. // var person = {name: 'Mario'};
  105.  
  106. // Observable.observations(person).forEach(changes => {
  107. // console.log(changes);
  108. // });
  109.  
  110. // person.name = "Andres";
  111. // person.age = 23;
  112.  
  113. var buttonClick = Observable.fromEvent(button, 'click');
  114.  
  115. // buttonClick.forEach(x => console.log(x.pageX));
  116.  
  117. var testObservable = buttonClick.map(x => ({pageX: x.pageX, pageY: x.pageY}));
  118.  
  119. testObservable.filter(x => x.pageX > 50).take(5).forEach(x => console.log(x.pageX + 'px'));
Add Comment
Please, Sign In to add comment