RxJs初识

70 阅读3分钟

Rxjs (ReactiveX)

官网:[rxjs.tech/guide/overv…]

简单介绍

  1. RxJS 是一个使用可观察序列编写异步和基于事件的程序的库。它提供了一种核心类型,即 Observable、一些周边类型(Observer、Scheduler、Subjects)和类似于 Array 方法(map、filter、reduce、every 等)的操作符,以便将异步事件作为集合进行处理。

可以将 RxJS 视为处理事件的 Lodash。

  1. ReactiveX 将观察者模式与迭代器模式和使用集合的函数式编程相结合,以便让你更好地管理事件序列。

  2. RxJS 中解决异步事件管理的基本概念有:

  • Observable(可观察者):表示未来(future)值或事件的可调用集合的概念。

  • Observer(观察者):是一个回调集合,它知道如何监听 Observable 传来的值。观察者物件回调属性(next、error、complete)

  • Subscription(订阅):表示 Observable 的一次执行,主要用于取消执行。

  • Operator(操作符):是纯函数,可以使用 map、filter、concat、reduce 等操作来以函数式编程风格处理集合。

  • Subject(主体):相当于一个 EventEmitter,也是将一个值或事件多播到多个 Observers 的唯一方式。

  • Scheduler(调度器):是控制并发的集中化调度器,允许我们在计算发生时进行协调,例如 setTimeout 或 requestAnimationFrame 或其它。

==自我总结(白话思考)== rxjs是一种流式数据操作和订阅处理的方式,打个比方:rx定于了一个管道,使得数据的流动类似于在一个管道之中进行流动传递,rx可以通过一些next()在水管的某个地方打开接口,向水管之中注入新的数据。同理,也可以通过新接入一个pipe管道,在接入的地方可以进行安装类似阀门的东西operator操作,对数据进行处理,处理完成之后继续向下流动,同时也可以通过在该接口的地方通过subscribe进行订阅观察,得到通过该接口的数据,进行其他的异步或者额外的操作。 通过数据管道的流动streams、处理、订阅等操作,在数据的不同的状态时刻进行不同的操作和处理,这样相当于将异步的操作进行串联,将事件处理的过程形成事件流。

简单上手

  1. 建立可观察的Observable物件
// 创建事件
const { formEvent } = "rxjs"
var click$=formEvent(document,"click")

  1. 建立观察者物件Observer
// 创建事件处理回调
// 可简化直接写入subscrible的回调之中
var observer = { next:(x)=>console.log(x)}

  1. 建立订阅物件(订阅Observable物件,并传入Observer观察者物件)

// 订阅事件,订阅事件才会触发observer进行回调处理
// 订阅,将事件与回调进行绑定,建立处理关系
// pipe()管道可以通过operator进行数据过滤处理
// subscrible订阅
const {filter,take } = "rxjs.operators"
var subs$ = click$.pipe(
    filter(d=>d>100), // 过滤
    take(4) // 限定次数,只取四次并且可以终止
    ).subscrible(observer)

  1. 取消订阅Subscription物件
// 取消订阅
subs$.unsubscrible()

Subject的用法(用于广播分发)

/* 1. 建立可观察的主体物件subject(用于主体物件之后进行广播) */
var subject = new rxjs.Subject()

/* 2. 建立可观察的Observable物件 */
var click$ = rxjs.fromEvent(document,"click")

/* 3.设定最多取两次数据之后就将Observable物件设为完成状态 */
click$=click$.pipe(take(2))

/* 4. 设定将click$全部交由subject主体物件进行广播 */
// ?? 这里类似于subject是处理函数,相当于click$将数据汇入subject主体,主体通过next()方法将数据下流,开放接口,从而使更多的人可以直接订阅subject来获取click$的数据
// Q??  为什么不直接订阅click$,
// A!! 多次订阅需要多次触发,希望是一次触发一次订阅进行多种操作,借由subject进行阔流,实现一对多,一次订阅多次操作、不同操作。
click$.subscrible(subject)

/* 5. 再由subject去建立Observer观察者物件 */
var subs1$=subject.subscrible(d1=>console.log(d1))
var subs2$=subject.subscrible(d2=>console.log(d2))

/* 6.双分支事件各自取消订阅 */

subs1$.unsubscrible();
subs2$.unsubscrible();

operator 操作器讲解

相关解析网站:

RxJS Marbles [rxmarbles.com/]

RxJs Explore [reactive.how/]

  1. operator的分类
  • 建立运算子
  • 转换运算子
  • 过滤运算子
  • 组合运算子
  • 多播运算子
  • 错误处理运算子 catchError retry(count) 重复调用函数
  • 工具函数运算子
  • 条件式和Boolean运算子
  • 数学运算子