如何在 java 中消除改造反应请求?
How to debounce a retrofit reactive request in java?
我正在开发一个 android 项目,该项目通过使用 Rx-Java 可观察和订阅的改造来发出请求。
但是,在某些交互中,可以多次调用此请求,我只想在预定义的 window 时间内执行最后一个请求(去抖动)。
我尝试将 debounce
运算符直接应用于可观察对象,但它不起作用,因为每次发生交互时都会执行以下代码:
mApi.getOnlineUsers()
.debounce(1, TimeUnit.SECONDS)
.subscribe(...)
我想应该只创建一个可观察对象,并且每次交互都应该 "append" 执行同一个可观察对象。但我是 Rx 的新手 Java,不知道该怎么做。
谢谢!
假设您想根据某个触发事件开始执行。
Observable<Event> trigger = ... // e.g. button clicks
您可以将触发事件转换为对您的 API 的调用,如下所示:
trigger
.debounce(1, TimeUnit.SECONDS)
.flatMap(event -> mApi.getOnlineUsers())
.subscribe(users -> showThemSomewhere(users));
另外,请注意 debounce
运算符将在时间范围内获取 last 事件,但 throttlefirst
将获取 首先。根据您的用例,您可能希望使用其中一种。
我正在开发一个 android 项目,该项目通过使用 Rx-Java 可观察和订阅的改造来发出请求。
但是,在某些交互中,可以多次调用此请求,我只想在预定义的 window 时间内执行最后一个请求(去抖动)。
我尝试将 debounce
运算符直接应用于可观察对象,但它不起作用,因为每次发生交互时都会执行以下代码:
mApi.getOnlineUsers()
.debounce(1, TimeUnit.SECONDS)
.subscribe(...)
我想应该只创建一个可观察对象,并且每次交互都应该 "append" 执行同一个可观察对象。但我是 Rx 的新手 Java,不知道该怎么做。
谢谢!
假设您想根据某个触发事件开始执行。
Observable<Event> trigger = ... // e.g. button clicks
您可以将触发事件转换为对您的 API 的调用,如下所示:
trigger
.debounce(1, TimeUnit.SECONDS)
.flatMap(event -> mApi.getOnlineUsers())
.subscribe(users -> showThemSomewhere(users));
另外,请注意 debounce
运算符将在时间范围内获取 last 事件,但 throttlefirst
将获取 首先。根据您的用例,您可能希望使用其中一种。