RxJS小记

做了这么长时间的Angular发现对其中的一些基本概念仍然不清楚,只知道怎么用但不知道为什么。花点时间看了一下RxJS的部分,现做个记录备忘。

函数式编程

提到RxJS就不得不说一下函数式编程这个东西,简单来说就是用运算解决问题,把每一个业务逻辑抽象成诸多的function,并用这些function的组合得到想要的结果。
举个栗子

(1 + 2) - 4 * 5

这是一个简单的运算,如果我们用函数式的思想来写应该是什么样的?

  add(a: number, b: number) {
    return a + b;
  };
  sub(a: number, b: number) {
    return a - b;
  };
  mul(a: number, b: number) {
    return a * b;
  };
  sub(sub(1,2), mul(4,5));

事件流

理解RxJS另一个重要的点是事件流。在RxJS中任何事物都是一个流,我可以针对这个流做任何操作。将任何业务变化都抽象成一个根据时间维度前进的流,通过不同的函数(即操作符)对事件流进行合并、转换等操作,得到最终的响应结果。

基本概念

到了这里有必要提一下RxJS中的一些基本概念了。

  • Observable可观察对象:表示一个可调用的未来值或者事件的集合。
  • Observer观察者:一个回调函数集合,它知道怎样去监听被Observable发送的值
  • Subscription订阅: 表示一个可观察对象的执行,对于一个Observable如果没有进行subscribe的话,这个函数是不会执行的。
  • Operators操作符: 纯粹的函数,使得以函数编程的方式处理集合比如:map,filter,contact,flatmap。
  • Subject(主题):等同于一个事件驱动器,是将一个值或者事件广播到多个观察者的唯一途径。
  • Schedulers(调度者): 用来控制并发,当计算发生的时候允许我们协调,比如setTimeout,requestAnimationFrame。

操作符

RxJS提供了非常丰富的操作符,推荐一个网站,以图形的形式表现操作符的作用,非常直观。
RxJS Marbles
下面仅仅列举两个常用的。
RxJS小记
RxJS小记
值得注意的是,所有的操作符都会返回一个新流,而不会修改原来的流。

pipe

pipe这个东西是RxJS6中新增的,好像唯一的作用就是转变链式写法,具体什么意思我也不懂,有大佬理解的话希望指点下。
RxJS小记