【发布时间】:2020-10-30 00:33:21
【问题描述】:
我有以下方法请求从端点获取口袋妖怪。
我想通过快速单击将多次调用此方法的按钮来防止用户发出快速请求。我已经使用了throttle* 方法和去抖动。
基本上,如果用户在 300 毫秒时间内快速单击按钮,我正在寻找它应该接受该持续时间内的最后一次单击。但是,我正在经历的是所有请求都在发出。也就是说,如果用户在该持续时间内快速点击 3 次,我仍然会收到 3 个请求。
fun getPokemonDetailByName(name: String) {
pokemonDetailInteractor.getPokemonDetailByName(name)
.subscribeOn(pokemonSchedulers.background())
.observeOn(pokemonSchedulers.ui())
.toObservable()
.throttleFirst(300, TimeUnit.MILLISECONDS)
.singleOrError()
.subscribeBy(
onSuccess = { pokemon ->
pokemonDetailLiveData.value = pokemon
},
onError = {
Timber.e(TAG, it.localizedMessage)
}
).addTo(compositeDisposable)
}
【问题讨论】:
-
您提出一个问题,阅读 2 周的答案,然后发布自己的一半答案并接受?我想从技术上讲,您所做的事情没有任何问题,但是,您是否知道在您自己的回答中,如果稍后提供该响应,您可能会得到一个过时的口袋妖怪版本?至少 2 个答案告诉您如何正确完成这项工作。请至少在您的答案中添加一个 switchMap。
-
感谢您提及 RxBinding。