引言
用户搜索时,为了避免产生无意义的搜索请求,通常会进行搜索数据限流。熟悉RxJava
的同学,一定会知道怎么做,各种天花乱坠的操作符让你眼花缭乱。
那么用上了kotlin
的小伙伴,完全可以不必使用RxJava
,因为kotlin
中自带的Flow
就可以做到。不废话,直接开始。
激起我写作的原因是这一篇文章Kotlin Flow 开发应用实践之搜索优化,这篇文章错误的使用了Flow,目前作者已经对文章内部的错误进行了更改,但是我还是想借机来说明一下。随后给出正确的解释及正确的代码。
错在了哪
我先把那篇文章中错误的代码贴上来:
// 错误代码🙅
binding.etSearch.doOnTextChanged { text, _, _, _ ->
searchFilter(text.toString())
}
private fun searchFilter(str:String){
flow { emit(str) }
.debounce(400)
.filter {
it.isNotEmpty()
}
.catch { LogUtils.d(it.message) }
.flowOn(Dispatchers.Default)
.onEach {
LogUtils.d("输出:$it")
binding.tvShow.text = it.t