RxJava2を使用して、私はいくつかのタイムイベントを達成しようとしています。RxJavaタイマーとタイムアウトを含むネストされたサブスクリプション
1秒未満で完了する非同期イベントがいくつかありますが、非同期操作の結果を続ける前に、少なくとも1秒間ユーザーにメッセージを表示したいその結果は後になります)。
非同期操作もタイムアウトする可能性があります。メッセージを表示して続行しないとします。
zip()
を最初のパラメータとして使用し、async操作を2番目の演算子として使用してこれを達成できますが、次の「レイヤー」では何をしますか?
これは私が実際にがに動作しており、これまでのところありますが、私は(非同期操作の代わりにjust()
を使用して、サブスクリプションのスレッドを無視して)ネストされたサブスクリプションの作成に非常に汚い感じのコード
mStringsですちょうどBehaviorSubject<String>
です。
mStrings.onNext("Waiting 1 second. The result will fire at the Single.timer onComplete");
Single.zip(Single.timer(1, TimeUnit.SECONDS), Single.just("First"), (t1, t2) -> t2)
.timeout(15, TimeUnit.SECONDS, observer -> {
mStrings.onNext("First timeout fired");
})
.subscribe(s1 -> {
mStrings.onNext("First timer fired and returned " + s1);
Single.zip(Single.timer(1, TimeUnit.SECONDS), Single.just("Second"), (t1, t2) -> t2)
.timeout(15, TimeUnit.SECONDS, observer -> {
mStrings.onNext("Second timeout fired");
})
.subscribe(s2 -> {
mStrings.onNext("Second timer fired and returned " + s2 + ". Previous was " + s1);
Single.zip(Single.timer(1, TimeUnit.SECONDS), Single.just("Third"), (t1, t2) -> t2)
.timeout(15, TimeUnit.SECONDS, observer -> {
mStrings.onNext("Third timeout fired");
})
.subscribe(s3 -> {
mStrings.onNext("Third timer fired and returned " + s3 + ". Previous was " + s1 + " and " + s2);
});
});
});
あり、その結果:
17:53:53.219 Waiting 1 second. The result will fire at the Single.timer onComplete
17:53:54.220 First timer fired and returned First
17:53:55.224 Second timer fired and returned Second. Previous was First
17:53:56.224 Third timer fired and returned Third. Previous was First and Second
私は流れのこのタイプでは理にかなってオペレータ足りませんか?またはいくつかの基本的な方法論?私は、複数の科目を使って別の解決法を試すことができるかもしれないが、それは過剰なようだ。
なので、1秒ごとに非同期操作を開始し、1秒ごとにステータスメッセージを表示すると、以前の非同期操作結果がすべて出力されますか? 1秒後にasycnの結果が返ってきたらどうなりますか? – yosriz