Observable

by Artem

Babel + JSX

'use strict';

class Observable {

  constructor(subscriberFn) {
    this.sub = subscriberFn;
  }

  static create(observerFn) {
    return new Observable(observerFn);
  }

  static of (value) {
    return Observable.create((observer) => {
      observer.next(value);
    });
  }

  map(mapFn) {
    const that = this;
    return Observable.create((observer) => {
      that.subscribe({
        next(v) {
          const newValue = mapFn(v);
          observer.next(newValue);
        }
      })
    });
  }

  subscribe(observer) {
    this.sub(observer);
  }
}

Observable.of('Hello world')
  .map((v) => v.toUpperCase())
  .subscribe({
    next(v) {
      console.log(v);
    }
  });