如何在 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 将获取 首先。根据您的用例,您可能希望使用其中一种。