响应式编程和RxJS介绍

响应式编程是一种面向数据流和变化传播的编程范式。
面向变化传播的编程就是看最初的数据是否会随着后续对应变量的变化而变化。比如当变量B的数值改变后,变量C的数值也随之变动。
面向数据流的编程是当监听一系列事件流并对这一系列事件流进行映射、过滤和合并等处理后,再响应整个事件流的回调的过程。例如在ReactiveX编程范式中,数据流被封装在一个叫Observable的对象实例中,通过观察者模式,对数据流进行统一的订阅(Subscribe),并在中间插入像filter()这样的操作函数,从而对Observable所封装的数据流进行过滤处理。

myObservable.filter(fn).subscribe(callback);

响应式编程清楚地表达了动态的异步数据流,而相关的计算模型也自动地将变化的值通过数据流的方式进行了传播。

ReactiveX

ReactiveX一般简写为Rx,它是微软开发并维护的一套工具库集合,用于提供一系列接口规范来处理异步数据流。

Observable

应用中产生的异步数据都需要先包装成Observable对象,Observable对象的作用是把这些异步的数据变换为数据流形式。所以生成的这些Observable对象相当于数据流的源头,后续操作都是围绕着这些被转换的流动数据展开。

Operator

Rx在结合了观察者模式的同时,还结合了函数式编程和迭代器模式的思想。其中,Rx的Operator便是对这两种模式的具体体现。
Operator是Rx中Observable的操作符。在Rx中,每一个Observable对象,或者说数据流,都可以通过某个operator对该Observable对象进行变换、过滤、合并和监听等操作。同时,大多数operator在对该Observable对象处理后返回一个新的Observable对象供下一个operator进行处理。这样方便在各个operator之间通过链式调用的方式编写代码。

//生成一个新的Observable对象
let newObservable=observable.debounceTime(500).take(2);

debunceTime()和take()都是一个Operator,这些Operators通过链式方法的组合,对原有的Observable对象进行操作,最终返回了一个新的Observable对象。
在Rx中,Observable作为观察者模式中的被观察者,需要一个方法来订阅它,而subscribe()便是这样一种方法,订阅Observable对象发出的所有事件。

observable.subscribe(observer);

subscribe()方法会接收一个observer作为参数,来对observable发出的事件进行订阅。每当observable完成并发送(Emit)一个事件时,该事件就会被observer所捕获,进入到observer对应的回调函数中。被subscribe()订阅过的Observable对象并不会返回一个新的Observable对象,因为subscribe()不是一个可以改变原始数据流的函数。相反,subscribe()会返回一个Subscription实例,这个Subscription实例又提供很多操作API,例如具有取消订阅事件功能的unsubscribe()。

其他核心概念

  • Observer:对Observable对象发出的每个事件进行响应
  • Subscription:Observable对象被订阅后返回的Subscription实例
  • Subject:EventEmitter的等价数据结构,可以当作Observable被监听,也可以作为Observer发送新的事件

RxJS

RxJS是Rx在JS层面上的实现,除此之外还有RxJava、Rx.Net等。

创建Observable对象

首先把数据流封装为统一的Observable对象,并对它进行相应的处理。

let button=document.querySelector('button');
Rx.Observable.fromEvent(button,'click') //返回一个Observable对象
    .subscribe(()=>console.log('Clicked'));

通过Observable中的fromEvent静态方法把

你可能感兴趣的:(响应式编程和RxJS介绍)