如何在java中消除一个翻新的被动请求?

我正在开发一个android项目,通过使用Rx-Java observable和subscribe来改造请求。

但是,在一些交互中,这个请求可以被多次调用,我只想在预定义的时间窗口(去抖动)中执行最后一个。

我试图直接将debounce运算符应用于observable,但是它不起作用,因为每次发生某种交互时都会执行下面的代码:

 mApi.getOnlineUsers() .debounce(1, TimeUnit.SECONDS) .subscribe(...) 

我猜应该只创build一个observable,每个交互都应该把执行“追加”到相同的observable。 但是我对Rx Java有点新鲜,不知道该怎么做。

谢谢!

Solutions Collecting From Web of "如何在java中消除一个翻新的被动请求?"

你可以使用一个主题 。

首先你创build一个发布主题:

 PublishSubject<SomeEvent> subject = PublishSubject.create(); 

然后,您可以订阅您要接收通知的地方:

 subject .debounce(1, TimeUnit.SECONDS); .subscribe(event -> consumeThis(event)); 

现在你已经准备好发布这个主题了:

 subject.onNext(mApi.getOnlineUsers()); 

此外,请注意, debounce操作符会在时间范围内最后一次出现,但throttlefirst首先出现 。 您可能要使用一个或另一个取决于您的使用情况。