RxJS 通过一个可观察的队列来解决异步和事件组合问题的库,Javascript的响应式扩展
RxJS is a library for composing asynchronous and event-based programs by using observable sequences.
Observable
RxJS(Reactive Extensions for JavaScript)是一个被Angular认可的第三方库,它实现了异步可观察对象(asynchronous observable)模式。Angular在rxjs/Observable模块中导出了一个精简版的Observable 类,这个版本缺少很多方法。
Reactive Extensions 是微软(研究院)提出的一个函数响应式编程抽象
Rx 提供了一种叫 Observable 的数据类型,兼容 ECMAScript 的 Observable Spec Proposal 草案标准。可以看作一个事件流,我们也可以把 Observable 看成一个有可变数据量的 Promise,而 Promise 只能包含一个数据。
1、对于变换,(最简单的方式)需要使用** .map** 方法,用来把 Observable 中的某个元素转换成另一种2、形式;
3、对于组合,(最简单的方式)需要使用** .mergeMap** 方法,用来把两个 Observable 整合为一个 Observable;
4、对于使用,我们需要使用 .subscribe 方法,用来通知 Observer 我们需要它开始工作。和Promise的then挺像的
5、 .toPromise 等,返回一个promise的对象
6、 .next(),它有点像Promise的成功情况下的回调函数,但是,因为Observable是跨时间的,它可能7、有零或多个值,所以next函数可能会被调用N次,或许会被调用上千次,或许一次都没被调用,这取决于Observable有多少值。
8、发生错误时候,.error()
9、有时候或许我们想知道是否完成了,此时,.complete()就派上用场了。
10、进行与时间相关的操作。因为Observable是以时间作为维度的,所以你绝对绝对可以做debounce、throttle、buffer这些操作
在 Angular 2 中,其实必然会用到 Observable
因为在 @Output 对应的 EventEmitter 实际上就是一个 Subject(同时为 Observable 和 Observer),不过虽然 Angular 2 使用了,这并没有和我们的代码产生联系,所以如果不想使用 Rx,也可以完全无视它。
另一个使用了 Rx 的地方是 Http 模块,其中 Observable 作为大部分 API 的交互对象使用。可以使用 .toPromise 的方式转换为 Promise 来使用。
网友评论