rxjs和它的操作符

之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的。

首先介绍几个重要的概念。

可以通过这个URL来详细了解相关知识:https://www.jianshu.com/p/f2f87925b229

rxjs中有几个重要的概念,有Observable、Observer、Subject,他们参考了观察者模式(或者叫发布/订阅模式)和迭代器模式。rxjs中有一个数据流的概念,和LINQ很类似,可以想象有一根管道,数据缓缓从管道中流过。发送数据的角色是生产者,消费数据的角色是观察者,观察者要想消费数据的话得知道生产者什么时候发送数据,也就是说,观察者要从生产者订阅一下通知,以便及时消费数据,这个过程就是由Observable来完成的。

Observable

Observevable是一个对象,如果要创建一个Observable,可以从如下两个例子来看:

 const observable$ = new Observable<number>(observer => {
      observer.next(1);
      observer.next(2);
      observer.next(3);
      observer.next(4);
      return {
        unsubscribe: () => {
          console.log('complete');
        }
      };
    });
    const subscription = observable$.subscribe(value => console.log(value));

如上,生产者就是next(1)啊,next(2)啊中的1和2,Observable<number>则表示这个生产者是一个要发送number类型的生产者,给构造函数传入的function是一个接受一个observer的函数,这个observer对象拥有三个方法分别是next、error和complete。其中next方法用来消费生产者发送出来的数据,error用来捕获错误,complete用来通知完成。没错,这个observer就是一个观察者,观察者用来消费生产者发布的数据。

Observable内部可以想象成这样的一种结构:

class observable<T> {
  _subscribe: (observer: Observer<T>) => Unsubscribable;
  constructor(subscriber: (observer: Observer<T>) => Unsubscribable) {
    this._subscribe = subscriber;
  }
  subscribe(observer: Observer<T>): Unsubscribable {
    this._subscribe(observer);
    return { unsubscribe: () => console.log('complete') };
  }
}

上面的代码简单的诠释了一个Observable的内部结构,Observer<T>是一个观察者,它拥有next、complete和error三个方法。

除了上面这些,Observable还有冷和热的的区别,这个以后补充,现在着急介绍下一个功能。

Subject

subject是Observable和Observer的结合,从Observable来看,subject本身是继承了Observable,从Observer来看,subject是observer的鸭子类型(兼容)。Subject的内部是这样的:

class subject<T> {
  _observers: Observer<T>[];
  subscribe(observer: Observer<T>): void {
    this._observers.push(observer);
  }
  next(value) {
    this._observers.forEach(item => item.next(value));
  }
  complete() {
    this._observers.forEach(item => item.complete());
  }
  error(value) {
    this._observers.forEach(err => err.error(value));
  }
}

不同于Observable的是Subject是多播的(组播),它可以通过一个生产者调动多个观察者。

基础的只知识就介绍到这里,下面介绍操作符。

 

posted @ 2018-11-13 16:36  wall-ee  阅读(344)  评论(0编辑  收藏  举报