RxJs Observables
What is Observable
Observable利用观察者模式,建立了发布者publisher和订阅者subscriber之间的联系。联系本身不会修改发布的信息,只是定义声明了订阅者对发布信息的处理方式。
使用目的:
流式处理本身是延迟执行的,即在需要数据的一刻进行处理,并且不改变数据本身而是生成一个新的流。多流处理的支持。
异步回调保证了流式处理结果的实时渲染,因此Observable是高性能前端的重要概念。可以将同步方法转换成异步方法。
支持事件处理,动态注册事件及句柄。
创建Observable
1 | import { Observable} from 'rxjs'; |
传入Observable回调函数/创建一个subscriber
1 | observable.subscribe({ |
创建multicast Observable
1 | function multicastSequenceSubscriber(){ |
Observable关系操作符
Area | Operator |
---|---|
Creation | from, fromEvent, of |
Comibination | combineLatest,concat, merge, startWith, withLatestFrom, zip |
Filtering | debounceTime, distinctUtilChanged, filter, take, takeUtil |
Transformation | bufferTime, concatMap, map, mergeMap, scan, switchMap |
Utility | tap |
Multicasting | share |
Observable的关系操作符,是通过.pipe()引入的,更多的操作符,可以参考rxjs官方API文档here。
Using observables in Angular
- EventEmitter
- HTTP模块处理AJAX requests
- Router, Forms 模块监听/响应用户输入
Observable v.s. Promise
- 共同点
方面 | 细节 |
---|---|
异步处理 | subscribe/then callback |
使用语言 | 支持typescript, javascript |
支持HTTP | 通过Angular httpClient支持, observable.toPromise() |
- 不同点
方面 | 细节 |
---|---|
使用场景 | O: 事件处理句柄, 流式处理; P: 链式处理 |
操作符复杂度 | O:多样化; P:单一 |
Reactive Programming
使用异步数据流进行编程,通过代码来忠实反映业务之间的关系。