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
下面仅仅列举两个常用的。
值得注意的是,所有的操作符都会返回一个新流,而不会修改原来的流。
pipe
pipe这个东西是RxJS6中新增的,好像唯一的作用就是转变链式写法,具体什么意思我也不懂,有大佬理解的话希望指点下。