所有的事件存在于一条事件总线上,所有的事件都可以看作未来某个时间将要发生的事件流(stream),当事件总线上的事件执行完后会主动去通知“观察他们的对象”,比我我们经常用到的setTimeout、异步等都属于该范畴。

补充说明:“响应式编程”采用了“订阅/观察者”设计模式,使订阅者可以将通知主动发送给各订阅者。

RxJs一个响应式编程的实现库

RxJs是一个库,它通过observer序列来编写异步和基于事件的程序。它提供了一个核心类型Observable,附属类型(Observer\Schedulers\Subjects)和受[Array#extras]启发的操作符(map\filter\reduce\erery,等等),这些数组操作符可以吧异步事件作为集合来处理。

以下几个概念是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 或其他。


实例说明

注册事件监听器的常规写法。

  1. var button = document.querySelector('button');
  2. button.addEventListener('click', () => console.log('Clicked!'));

使用 RxJS 的话,创建一个 observable 来代替。

  1. var button = document.querySelector('button');
  2. Rx.Observable.fromEvent(button, 'click').subscribe(() => console.log('Clicked!'));