2017-01-30 11 views
3

onNextが呼び出されてから10秒後にランダムな値を出力します。したがって、onNextは12345と10秒後にonNextは乱数のために呼び出される必要があります呼び出されます。 RxJavaを使ってこれを達成する最良の方法は何ですか?前もって感謝します。特定の時間の後にonNextが呼び出された後に値を出力します。

Observable.create(subscriber -> { 
    subscriber.onNext(12345); 
}).subscribeOn(...) 
.observeOn(...) 
.subscribe(new Subscriber<Long>(){ 
    @Override 
    public void onNext(Long aLong) { 
     //Do Something 
    } 
}) 
+0

このロジックをsubscriber - > {}メソッドに入れることができます。タイマーなどで仕事をすることができます。 jus tmyオプションですが、RxJavaは複雑なケースをすぐに扱うことはできません。複雑なケースでは、純粋なJavaでデータをどのように発行するかに関する論理を記述することをお勧めします。 –

+0

オペレータや同じものには何もありませんか? – Simar

+0

このケースの縫い目は非常に特殊なものですが、多分誰かが良いアイデアを持っています。それは特に悪いアドバイスです。 –

答えて

1

'12345'の値をすぐに出すと、解決は簡単です。この観察可能な部分をtimerとマージするだけで、この種の動作が得られます。ただし、OnSubscribeメソッドのロジックがcreateに渡されていて、何らかの作業が行われていて準備ができたら(つまりネットワークリクエスト)値を放出すると仮定します。その場合は、flatMapmergeの演算子を利用する必要があります。これのようなもので十分です。

Observable.create(subscriber -> { 
    subscriber.onNext(12345); 
}) 
    .flatMap(value -> Observable.just(value) 
     .mergeWith(Observable.timer(10, TimeUnits.SECONDS).map(/* define your "random" value here */)) 
) 
    .subscribeOn(...) 
    .observeOn(...) 
    .subscribe(new Subscriber<Long>(){ 
     @Override 
     public void onNext(Long aLong) { 
     //Do Something 
     } 
    }) 

それはすぐにこの値を放出し、何か他のものを放出するために10秒のタイマーを開始する、あなたの値を取り、に変換して、観察します。

注:が、これはすべての項目をあなたに観察発するを取り、それらのそれぞれについて、この遅延された第2の応答を作成することに注意してください。したがって、観測可能なソースから複数の値を出力する場合は、これを考慮する必要があります。

+0

ありがとうございます。これは完璧なソリューションです。 – Simar

関連する問題