Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. function Observable(forEach) {
  2. this._forEach = forEach;
  3. }
  4.  
  5. Observable.prototype = {
  6. forEach: function(onNext, onError, onCompleted) {
  7. if (typeof onNext === "function") {
  8. this._forEach({
  9. onNext: onNext,
  10. onError: onError || function() {},
  11. onCompleted: onCompleted || function() {}
  12. });
  13. } else {
  14. // onNext is {onNext: () => {}, onError: (), ...}
  15. return this._forEach(onNext);
  16. }
  17. },
  18. map: function(projectionFunction) {
  19. var self = this;
  20. return new Observable(function forEach(observer) {
  21. return self.forEach({
  22. onNext: x => {
  23. observer.onNext(projectionFunction(x));
  24. },
  25. onError: e => observer.onError(e),
  26. onCompleted: () => observer.onCompleted()
  27. });
  28. });
  29. },
  30. filter: function(testFunction) {
  31. var self = this;
  32. return new Observable(function forEach(observer) {
  33. return self.forEach({
  34. onNext: x => {
  35. if (testFunction(x)) {
  36. return observer.onNext(x);
  37. }
  38. },
  39. onError: e => observer.onError(e),
  40. onCompleted: () => observer.onCompleted()
  41. });
  42. });
  43. },
  44. take: function(num) {
  45. var self = this;
  46. var counter = 0;
  47. return new Observable(function forEach(observer) {
  48. var subscription = self.forEach({
  49. onNext: x => {
  50. observer.onNext(x);
  51. counter++;
  52. if (counter > num) {
  53. subscription.dispose();
  54. observer.onCompleted();
  55. }
  56. },
  57. onError: e => observer.onError(e),
  58. onCompleted: () => observer.onCompleted()
  59. });
  60.  
  61. return subscription;
  62. });
  63. }
  64. };
  65.  
  66. Observable.fromEvent = function(dom, eventName) {
  67. return new Observable(function forEach(observer) {
  68. var handler = e => observer.onNext(e);
  69.  
  70. dom.addEventListener(eventName, handler);
  71.  
  72. return {
  73. dispose: () => {
  74. dom.removeEventListener(eventName, handler);
  75. }
  76. };
  77. });
  78. };
  79.  
  80.  
  81. const button = document.getElementById("button");
  82.  
  83. Observable.fromEvent(button, "click")
  84. .filter(e => e.pageX > 20)
  85. .map(e => e.pageX + "px")
  86. .forEach({
  87. onNext: e => console.log(e)
  88. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement