Rxjs的常用概念
作者:互联网
1. Rxjs的基本概念
Observable Observer Subscription Subject Operators
Observer 就是实现该接口的一种对象
2. Rxjs Observable的创建
创建,即创建 Observable 的操作符,如 from、of、interval 转换 如 map、pluck 过滤 如 filter、last、take、throttle、debounce 合并 如 concat、merge、zip 多播 如 multicast 错误处理 如 catch、retry 辅助工具 如 do 条件分支 如 every、find、isEmpty 数学 如 count、max、min、reduce 3.Rxjs PublishSubject,ReplaySubject,BehaviorSubject,AsyncSubject PublishSubject 正常发布订阅 ReplaySubject 缓存所有数据,每次新订阅可接收所有数据
ReplaySubject.createWithSize 限制缓存多少个数据; ReplaySubject.createWithTime 限制一个数据可以在缓存中保留多长时间 ReplaySubject.createWithTimeAndSize 则可以同时限制时间和个数
BehaviorSubject 只保留最后一个值, 立即发出 AsyncSubject 只保留最后一个值, 只在调用complete时 4. Rxjs switchMap, mergeMap, concatMap, exhaustMap concatMap: 串行执行, 前一个完成,才开始后一个 mergeMap: 并行执行 switchMap: 顺序执行, 后一个开始,会取消前一个,适用的场景较多 (在取消之前, 前一个执行较快, 也会有订阅输出, 不同于ajax的abort) exhaustMap: 顺序执行, 前一个执行期间, 后一个发出会被丢弃, 直到前一个执行完成, 停止丢弃,开始接收新的
switchMap例子: 完整的拖曳事件
Observable Observer Subscription Subject Operators
Observer 就是实现该接口的一种对象
interface Observer<T> { void onCompleted(); void one rror(java.lang.Throwable e); void onNext(T t); }支持next和completed,类似于Promise
2. Rxjs Observable的创建
create fromPromise fromEvent from of interval range操作符按照功能分类,大概有以下几个内容:
创建,即创建 Observable 的操作符,如 from、of、interval 转换 如 map、pluck 过滤 如 filter、last、take、throttle、debounce 合并 如 concat、merge、zip 多播 如 multicast 错误处理 如 catch、retry 辅助工具 如 do 条件分支 如 every、find、isEmpty 数学 如 count、max、min、reduce 3.Rxjs PublishSubject,ReplaySubject,BehaviorSubject,AsyncSubject PublishSubject 正常发布订阅 ReplaySubject 缓存所有数据,每次新订阅可接收所有数据
ReplaySubject.createWithSize 限制缓存多少个数据; ReplaySubject.createWithTime 限制一个数据可以在缓存中保留多长时间 ReplaySubject.createWithTimeAndSize 则可以同时限制时间和个数
BehaviorSubject 只保留最后一个值, 立即发出 AsyncSubject 只保留最后一个值, 只在调用complete时 4. Rxjs switchMap, mergeMap, concatMap, exhaustMap concatMap: 串行执行, 前一个完成,才开始后一个 mergeMap: 并行执行 switchMap: 顺序执行, 后一个开始,会取消前一个,适用的场景较多 (在取消之前, 前一个执行较快, 也会有订阅输出, 不同于ajax的abort) exhaustMap: 顺序执行, 前一个执行期间, 后一个发出会被丢弃, 直到前一个执行完成, 停止丢弃,开始接收新的
switchMap例子: 完整的拖曳事件
Rx.Observable.fromEvent(document, ‘mousedown’) .map(e => e.target) .switchMap(target => Rx.Observable.fromEvent(document, ‘mousemove’).map(e => { return { startX: target.offsetX, startY: target.offsetY, moveX: e.pageX, moveY: e.pageY, } })) .subscribe(pos => console.log(pos))switchMap里面的函数接收mousedown这个流给的target,然后再返回一个新的关于mousemove的流,并且对这个新的流作map处理,过程中把前面的target也用上了。在switch发生的时候,mousedown的事件监听就给丢掉了。后面就全是跟mousemove相关的监听。 出处: https://juejin.cn/post/6861514628132765710 出处: https://www.bilibili.com/read/cv13462830 出处: https://blog.csdn.net/kongbaidepao/article/details/51240456 出处: https://blog.csdn.net/qq_26025363/article/details/100009556 出处: https://www.tangshuang.net/6105.html
标签:Observable,常用,target,ReplaySubject,switchMap,概念,https,Rxjs 来源: https://www.cnblogs.com/mengff/p/15952140.html