wsqww / devNote

开发笔记
3 stars 3 forks source link

RxJs 题目汇总 #51

Open wsqww opened 3 years ago

wsqww commented 3 years ago

基本介绍

解决异步编程的应用库; 基于可观测数据流 Stream 结合观察者模式和迭代器模式实现。

在 RxJS 中用来解决异步事件管理的的基本概念是:

  1. Observable (可观察对象): 表示一个概念,这个概念是一个可调用的未来值或事件的集合。
  2. Observer (观察者): 一个回调函数的集合,它知道如何去监听由 Observable 提供的值。
  3. Subscription (订阅): 表示 Observable 的执行,主要用于取消 Observable 的执行。
  4. Operators (操作符): 采用函数式编程风格的纯函数 (pure function),使用像 map、filter、concat、flatMap 等这样的操作符来处理集合。
  5. Subject (主体): 相当于 EventEmitter,并且是将值或事件多路推送给多个 Observer 的唯一方式。
  6. Schedulers (调度器): 用来控制并发并且是中央集权的调度员,允许我们在发生计算时进行协调,例如 setTimeout 或 requestAnimationFrame 或其他。
wsqww commented 3 years ago

单播多播

单播:

每个普通的 Observables 实例都只能被一个观察者订阅,当它被其他观察者订阅的时候会产生一个新的实例。也就是普通 Observables 被不同的观察者订阅的时候,会有多个实例,不管观察者是从何时开始订阅,每个实例都是从头开始把值发给对应的观察者;

多播:

订阅只会接收到实时的数据的功能;Subject

wsqww commented 3 years ago

冷 热 Observabel

冷:

只有被 observers 订阅的时候,才会开始产生值。是单播的,有多少个订阅就会生成多少个订阅实例,每个订阅都是从第一个产生的值开始接收值,所以每个订阅接收到的值都是一样的。

热:

不管有没有被订阅都会产生值。是多播的,多个订阅共享同一个实例,是从订阅开始接受到值,每个订阅接收到的值是不同的,取决于它们是从什么时候开始订阅。

wsqww commented 3 years ago

待完善

mergeMap, switchMap, concatMap, exhaustMap

mergeMap :

会立即订阅所有内部 observables,先完成的 先发出值;

switchMap :

它具有取消效果。在每次发出时,会取消前一个内部 observable (你所提供函数的结果) 的订阅,然后订阅一个新的 observable

concatMap :

将值映射成内部 observable,并按顺序订阅和发出 concatMap 之前前一个内部 observable 完成后才会订阅下一个;

wsqww commented 3 years ago

subject & BehaviorSubject 有什么区别

BehaviorSubject是subject的变体,具有类似的多播功能。 不同的是,BehaviorSubject需要初始值,并且会在订阅时发出当前值。 Subject只是多播,不保留状态,但是我们可以使用BehaviorSubject来知道最后一个发出的值。