throttleFirst

作者: zhongjh | 来源:发表于2022-04-19 17:32 被阅读0次

    大家最开始在做项目的时候,往往碰到处理防抖动的情况,如果用到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的辅助处理,有新的场景发现我都会发布新的文章。

    相关文章

      网友评论

        本文标题:throttleFirst

        本文链接:https://www.haomeiwen.com/subject/mszsertx.html