簡體   English   中英

等效於RxJava的RxJS.pausable(Observable)

[英]equivalent of RxJS.pausable(Observable) for RxJava

我搜索RxJava的等效RxJS.pausable(Observable)

目前,我有以下內容,但看起來有些奇怪。 有沒有更好的辦法?

PublishSubject<Boolean> allValidSubject = PublishSubject.create();
PublishSubject<Void> clickSubject = PublishSubject.create();

allValidSubject
      .switchMap(valid -> valid ? clickSubject : Observable.empty())
      .skipUntil(allValidSubject)
// ...

最后,我有兩個觀察值。 一個用於輸入驗證,另一個用於發送按鈕單擊事件。

我認為這樣可以做到。

Observable<String> event = Observable.just("My Input");
// false - paused by default
final BehaviorSubject<Boolean> pauser = BehaviorSubject.create(false);

event
    .flatMap(new Func1<String, Observable<String>>() {
        @Override
        public Observable<String> call(final String input) {
            return pauser
                    .distinctUntilChanged()
                    .filter(new Func1<Boolean, Boolean>() {
                        @Override
                        public Boolean call(Boolean resumed) {
                            return resumed;
                        }
                    })
                    .map(new Func1<Boolean, String>() {
                        @Override
                        public String call(Boolean resumed) {
                            return input;
                        }
                    });
        }
    })
    .subscribe(new Action1<String>() {
        @Override
        public void call(String input) {
            // handle input
        }
    });

要恢復/繼續:

pauser.onNext(true);
pauser.onNext(false);

可觀察到的事件可以用上面建議的CombineLatest替換,但這是針對每個用例的,仍然可以進行flatMapped。 可以將相同的fasle / true推入暫停器,這是distrinctUntilChanged插入的地方,以避免已恢復/已暫停的恢復或暫停。

暫無
暫無

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

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