2016-12-14 7 views
0

Observableの非同期演算子を別のスレッドではなくメインスレッドで実行するように設定する方法を教えてください。または、少なくとも完了したらメインスレッドで結果を取得するように設定してください。SubscribeOnメインスレッド

@Test 
    public void retryWhen() { 
     Scheduler scheduler = Schedulers.newThread(); 
     Single.just("single") 
       .map(word -> null) 
       .map(Object::toString) 
       .retryWhen(ot -> 
         ot.doOnNext(t -> System.out.println("Retry mechanism:" + t)) 
           .filter(t -> t instanceof NullPointerException && cont < 5) 
           .flatMap(t -> Observable.timer(100, TimeUnit.MILLISECONDS,scheduler)) 
           .doOnNext(t -> cont++) 
           .switchIfEmpty(Observable.error(new NullPointerException()))) 
       .subscribeOn(scheduler) 
       .subscribe(System.out::println, System.out::println); 
//  new TestSubscriber() 
//    .awaitTerminalEvent(1000, TimeUnit.MILLISECONDS); 
    } 

observerOnとsubscribeOnを試していますが、両方とも実行するスレッドを設定するために使用されます。しかし、私の場合は、テストを実行しているスレッドと同じスレッドにその実行またはその終了をします。

今は印刷を見るための唯一の方法は、ブロックして実行を待っています。

よろしくお願いいたします。

答えて

1

Observable.toBlocking()を使用してBlockingObservableを取得し、テストで結果を抽出することができます。

+0

はい、それはブロックしているだけです。他のスレッドが終了するのを待っているのとほとんど同じです。私が探していたのは、発行されたアイテムを別のスレッドからメインスレッドに戻す方法でした。私はそれが私の選択肢の一つだと思う。とにかくありがとうございます – paul

+0

'@ Test'メソッドが終了する前に' Observable'の結果が必要ですか?私はブロックする以外にそれに別の方法はありません。 –

+0

テストは私がここで何を望んでいるかを示すコンセプトの証明です。私はすでにそれを持っていると私は信じて心配しないでください。私はあなたの助けを肯定しました – paul

0

あなたはobserveOn/subscribeOn、その後、無オペレータまたは観察可能な変更のスレッド、それはサブスクリプション中にすべての処理を行います観測可能にしますsubscribeを指定しない場合。

+0

はい、Observable.timerは非同期演算子です – paul

関連する問題