RXJX编程模式

  1. 函数式编程
    • 声明式
    • 纯函数
    • 数据不可变
  2. 响应式编程
  3. Reactive Extension(改进异步编程模型见RX)

    RXJX优势

  4. 数据流抽象现实问题

  5. 擅长处理异步
  6. 复杂问题分解简单问题组合

RXJX概念

Observable可被观察者

  • 观察者模式(Observer Pattern)
    • 如何产⽣事件, 这是发布者的责任, 在RxJS中是Observable对象的⼯作
    • 如何响应事件, 这是观察者的责任, 在RxJS中由subscribe的参数来决定
  • 迭代器模式(Iterator Pattern)

    Hot Observable 与 Cold Observable

    如果每次订阅的时候, 已经有⼀个热的“⽣产者”准备好了, 那就
    是Hot Observable, 相反, 如果每次订阅都要产⽣⼀个新的⽣产者, 新的⽣
    产者就像汽车引擎⼀样刚启动时肯定是冷的, 所以叫Cold Observable。

    Observer 数据流的消费者

  1. //Observable.subscribe(Observer)
  2. const onSubscribe = observer => {
  3. let number = 1;
  4. const handle = setInterval(() => {
  5. console.log('in onSubscribe ', number);
  6. observer.next(number++);
  7. }, 1000);
  8. return {
  9. unsubscribe: () => {
  10. //clearInterval(handle);
  11. }
  12. };
  13. };
  14. const source$ = new Observable(onSubscribe);
  15. const subscription = source$.subscribe(item => console.log(item));
  16. setTimeout(() => {
  17. subscription.unsubscribe();
  18. }, 3500)

操作符简介

对于现实中复杂的问题, 并不会创造⼀个数据流之后就直接通过subscribe接上⼀个Observer, 往往需要对这个数据流做⼀系列处理, 然后才交给Observer。 就像⼀个管道, 数据从管道的⼀段流⼊, 途径管道各个环节, 当数据到达Observer的时候, 已经被管道操作过, 有的数据已经被中途过滤抛弃掉了, 有的数据已经被改变了原来的形态, ⽽且最后的数据可能来⾃多个数据源, 最后Observer只需要处理能够⾛到终点的数据;
image.png
image.png
在RxJS中, 作为迭代器的使⽤者, 并不需要主动去从Observable
中“拉”数据, ⽽是只要subscribe上Observable对象之后, ⾃然就能够收到消
息的推送, 这就是观察者模式和迭代器两种模式结合的强⼤之处