• [RxJS] Creating Observable From Scratch


    Get a better understanding of the RxJS Observable by implementing one that's similar from the ground up.

    class SafeObserver {
      constructor(destination) {
        this.destination = destination;
      }
      
      next(value) {
        const destination = this.destination;
        if (destination.next && !this.isUnsubscribed) {
          destination.next && destination.next(value);
        }
      }
      
      error(err) {
        const destination = this.destination;
        if (!this.isUnsubscribed) {
          if (destination.error) {
            destination.error(error);
          }
          this.unsubscribe();
        }
      }
      
      complete() {
        const destination = this.destination;
        if (!this.isUnsubscribed) {
          if (destination.complete) {
            destination.complete();
          }
          this.unsubscribe();
        }
      }
      
      unsubscribe() {
        this.isUnsubscribed = true;
        if (this._unsubscribe) {
          this._unsubscribe();
        }
      }
    }
    
    class Observable {
      constructor(_subscribe) {
        this._subscribe = _subscribe;
      }
      
      subscribe(observer) {
        const safeObserver = new SafeObserver(observer);
        safeObserver._unsubscribe = this._subscribe(safeObserver);
        return () => safeObserver.unsubscribe();
      }
    }
    
    const myObservable = new Observable((observer) => {
      let i = 0;
      const id = setInterval(() => {
        if (i < 10) {
          observer.next(i++);
        } else {
          observer.complete();
        }
      }, 100);
      
      return () => {
        console.log('unsubbed');
        clearInterval(id);
      };
    });
    
    const observer = {
      next(value) { console.log('next -> ' + value); },
      error(err) { },
      complete() { console.log('complete'); }
    };
    
    
    const foo = myObservable.subscribe(observer);
    
    foo.unsubscribe();
  • 相关阅读:
    ModelMap和ModelAndView的作用
    jquery 临时存值
    条件sql ibatis
    IBATIS动态SQL
    MyEclipse 快捷键
    jquery $用法
    弹窗案例
    Ibatis sql语句1
    Ibatis sql语句
    jQuery的三种$()
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5285918.html
Copyright © 2020-2023  润新知