throttleFirst
2022-04-19 本文已影响0人
zhongjh
大家最开始在做项目的时候,往往碰到处理防抖动的情况,如果用到Rxjava网上查询资料的时候就会有以下解决方法:
RxView.clicks(mButton).throttleFirst(1, TimeUnit.SECONDS)
.subscribe(observer);
上面的方法意思就是,触发事件后,1秒内不能再次触发同样的事件。
与throttleFirst
相反的还有个是debounce
,debounce
是xx时间内,以最后一个事件触发,抛弃前面所有事件,往往用于处理即时搜索
那么throttleFirst是不是能用于更多其他场景呢
那比如一个场景,多个方法会共同调用一个方法,导致最后一个方法可能会多次被触发,但是,我们只想调用一次
那么这个场景如何优雅的处理呢?代码如下:
// 搜索点击
val searchClick: Observable<String> =
intent(SearchView::searchClickIntent)
// 搜索文本改变
val searchTextChanges: Observable<String> =
intent(SearchView::searchTextChangesIntent)
val searchContent = Observable.merge(searchClick, searchTextChanges)
.throttleFirst(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.switchMap { search(it) }
从上面代码看的出来,搜索点击和搜索文本改变,最终都会触发search(it)事件,所以我们把它两合并,然后使用throttleFirst
函数,就能1秒内不能再次触发search事件了
喜欢的收藏哦,最近在研究mvi项目,里面涉及很多rxjava2的辅助处理,有新的场景发现我都会发布新的文章。