Android开发经验谈Android开发Android

throttleFirst

2022-04-19  本文已影响0人  zhongjh

大家最开始在做项目的时候,往往碰到处理防抖动的情况,如果用到Rxjava网上查询资料的时候就会有以下解决方法:

RxView.clicks(mButton).throttleFirst(1, TimeUnit.SECONDS)
             .subscribe(observer);

上面的方法意思就是,触发事件后,1秒内不能再次触发同样的事件。
throttleFirst相反的还有个是debouncedebounce是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的辅助处理,有新的场景发现我都会发布新的文章。

上一篇下一篇

猜你喜欢

热点阅读