初识Rxjs的基础概念

1.Observable:可观察对象—一个值或事件的流集合;
(1) 创建:Rx.Observable.create()/of()/from()等;
(2)订阅:subscrible()—每次调用都会有一个新的观察者,数据不共享;相当于调用创建Observables的参数函数,并提供接收数据的回调函数;
(3)执行:可观察者对象实例.next()/error()/complete()—相当于return;可以发送多个next通知,但若发送的是error/complete通知,则之后不会再发送任何通知了;
(4)清理:unsubscribe()


创建

(5)hot Observable vs cold Observable

  • hot Observable:内容创建与订阅者无关,实现多播,即无论多少个oberser来subscribe,推给observer的都是一样的数据源,若无订阅者,数据依然会产生,只是不传入数据通道;

    • 创建操作符:fromPromise、fromEvent、fromEventPattern;
  • cold Observable:每次被subscribe都产生一个全新的数据流,实现单播,若无订阅者,连数据都不会产生;
    2.Observer:观察者—三个回掉函数的集合对象

  • next():接收Observable发出的值;

  • error():接收错误;

  • complete():当没有新的数据发出时,触发操作;
    (1)先声明observer对象,再传入subscribe()做参数;


    声明观察者对象

    传入subscribe()

    (2)在subscribe()内部写回调函数,它会创建一个观察者对象;


    封装为observer

3.Subscription:订阅—Observable的执行,当Observable变化时,调用observer提供的方法通知他;
(1)订阅Observable类似于函数调用;
(2)unsubscribe()清理Subscription占用的资源;

4.Subject:主体—同一个Observable可以被多个observer订阅,subject可以向多个observer多路推送数值;
(1)每个Subject即是Observable也是Observer;

  • Subject不能重复使用,一旦Subject对象调用了complete/error函数,则它作为Observable的生命周期也就结束了;


    observerA:1, observerB:1, observerA:2, observerB:2

    observerA:1, observerB:1, observerA: 2, observerB:2, observerA:3, observerB:3

(2)BehaviorSubject:保存发送给消费者的最新值(初始值是0),并且当有新的观察者订阅时,会立即接收到该最新值;

observerA:0, observerA:1, observerA:2, observerB:2, observerA:3, observerB:3

  • publishBehavior():返回一个BehaviorSubject,当订阅时可立即获得上游吐出的最新值;

(3)ReplaySubject:记录Observable执行中的多个值并将其回放给订阅者

  • 创建时指定回放值的个数;


    为新的订阅者缓存三个值—observerA:1, observerA:2, observerA:3, observerA:4, observerB:2, observerB:3, observerB:4, observerA:5, observerB:5
  • 指定window time来确定记录多久以前的值;


    最大缓存数量是100,window time是500ms
  • publishReply(n):返回一个ReplaySubject,当订阅时缓存上游数据流中的n个数据;

(4)AsyncSubject:等待Observable发出complete通知后,才发送最后一个单个值

observerA:5, observerB:5

  • publishLast():返回一个AsyncSubject,订阅时只获取上游数据的最后一个值;

(5)refCount():当observable有订阅后才会自动打开广播功能,当没有订阅后,会自动关闭;
(6)publish()

5.Operators:操作符—接收传入的Observable,返回新的Observable;


常见的操作符

操作符分类

6.Scheduler:调度器— 改变Observable对象吐数据的节奏;
(1)实例

  • undefined/null:即不指定scheduler,代表同步执行的scheduler;
  • asap:利用事件循环实现异步,使用的是micro task
  • async:利用事件循环实现异步,使用的是macro task
  • queue:同步执行;
  • animationFrame:用于动画场景的scheduler;

[总结]Observable实例对象只是声明不执行,只有订阅subscribe是才执行其参数函数,若内部传出出来会调用subscribe的回调函数;

你可能感兴趣的:(初识Rxjs的基础概念)