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();
  • 相关阅读:
    解析Zigbee技术在智能家居应用中的优缺点
    ZigBee无线网络技术在小区路灯照明系统的应用
    Zigbee技术特点
    梯度下降法-理解共轭梯度法
    感知机--理解系数向量和样本点递归
    fisher线性判别
    iso data 聚类算法
    近邻算法--类与类间最小损失函数
    聚类算法--理解最大最小距离分类
    类间距离测度方法
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5285918.html
Copyright © 2011-2022 走看看