zoukankan      html  css  js  c++  java
  • [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();
  • 相关阅读:
    广度遍历有向图
    坚持的力量 第二十一篇
    坚持的力量 第二十二篇
    搜索引擎首页
    安装ubuntu
    最小生成树之Kruskal算法
    最小生成树之PRIM算法
    文件同步软件
    [恢]hdu 2151
    [恢]hdu 1396
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5285918.html
Copyright © 2011-2022 走看看