2015-10-21 14 views
9

Tôi đang làm việc trên một dự án Android yêu cầu thông qua trang bị thêm bằng Rx-Java có thể quan sát và đăng ký.Làm thế nào để debounce một yêu cầu phản ứng trang bị thêm trong java?

Tuy nhiên, trong một số tương tác, yêu cầu này có thể được gọi nhiều lần và tôi chỉ muốn thực hiện lần cuối cùng trong cửa sổ được xác định trước (debounce).

Tôi cố gắng để áp dụng các nhà điều hành debounce trực tiếp đến quan sát được, nhưng nó sẽ không hoạt động vì mã dưới đây được thực hiện mỗi khi một số tương tác xảy ra:

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

Tôi đoán nó phải được tạo ra chỉ có một quan sát được và mọi tương tác, nó sẽ "nối thêm" việc thực hiện với cùng một quan sát. Nhưng tôi là loại mới trên Rx Java và không biết chính xác phải làm gì.

Cảm ơn!

Trả lời

8

Giả sử bạn muốn bắt đầu thực hiện theo một số sự kiện kích hoạt.

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

Bạn có thể chuyển đổi các sự kiện kích hoạt để các cuộc gọi đến API của bạn như thế này:

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

Ngoài ra, thông báo rằng các nhà điều hành debounce sẽ lấy xuất hiện cuối cùng trong khung thời gian, nhưng throttlefirst sẽ lấy số trước tiên. Bạn có thể muốn sử dụng cái này hay cái khác tùy thuộc vào trường hợp sử dụng của bạn.

+0

Điểm tốt và bạn cũng có thể cân nhắc sử dụng [PublishRelay] (https://github.com/JakeWharton/RxRelay) – miroslavign

Các vấn đề liên quan