簡體   English   中英

RxJava一次只執行一個Observable

[英]RxJava execute only one Observable at a time

我們有搜索字段的窗口。 每次用戶輸入內容時都會執行搜索。

  1. 搜索事件被轉換為數據流。

  2. 在每次新搜索時,我們都需要啟動異步網絡操作並關閉之前的操作。 如何歸檔此效果?

編輯1:這是我嘗試過的。 它執行所有可觀察的! 不是唯一的最后一個,哪里是錯誤的?

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

subject.switchMap(integer -> Observable.fromCallable(() -> {
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "-" + integer + "-";
})).subscribe(s -> System.out.print(s));
for (int i = 0; i < 30; i++) subject.onNext(i);

PublishSubjectswitchMap PublishSubject使用:

PublishSubject<String> subject = PublishSubject.create();
subject
  .switchMap(
    x -> networkOperationObservable(x)
           .subscribeOn(Schedulers.io))
  .subscribe(subscriber);

為了充分利用這個networkOperationObservable將明確響應unsubscribe調用(如關閉Socket或其他)。 Observable.using一般是選擇的工具。

PublishSubject正是您所需要的。 它是一個Observable您可以隨時添加事件。

創造它:

private Subject<String, String> filteringSubject = PublishSubject.create();

然后使用Observable.throttleWithTimeout()運算符:

Subscriber<String> filteringSubscriber = new DefaultSubscriber<>();
filteringSubject
    .throttleWithTimeout(250, TimeUnit.MILLISECONDS)
    .doOnNext(new Action1<String>() {
        @Override
        public void call(String text) {
            //make a network call
        }
     })
     .subscribe(filteringSubscriber);

用法:

filteringSubject.onNext(text);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM