2015-10-21 19 views
9

我正在開發一個android項目,通過使用Rx-Java observable和subscribe來改造請求。如何在java中消除改造的被動請求?

但是,在某些交互中,可以多次調用此請求,並且我只想在預定義的時間窗口(去抖動)中執行最後一個。

我試圖直接應用debounce操作者可觀察到的,但是由於下面的代碼,每次執行一些互動發生時,它不會工作:

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

我想這應該只創建一個可觀察和每個交互都應該將執行「附加」到相同的可觀察對象。但是我對Rx Java有點新,並且不知道該怎麼做。

謝謝!

回答

8

假設您想根據某個觸發事件開始執行。

Observable<Event> trigger = ... // e.g. button clicks 

您可以將觸發事件,以調用您的API是這樣的:

trigger 
    .debounce(1, TimeUnit.SECONDS) 
    .flatMap(event -> mApi.getOnlineUsers()) 
    .subscribe(users -> showThemSomewhere(users)); 

此外,公告稱,debounce運營商將採取時間框架內最後發生,但throttlefirst會先拿。您可能要根據您的使用情況使用其中一種。

+0

好點,你不妨考慮使用[PublishRelay](https://github.com/JakeWharton/RxRelay) – miroslavign