2017-08-22 12 views
0

私は制御しないコードで値を返す長時間実行する操作をしています。私はそれを求めているものにその価値を公開する必要があります。この目的のために私はBehaviorSubjectを使用しています:別のオブザーバブルから作成された単一のオートコンプリート

var subject: Subject<Value>? = null 

fun retrieveValue(): Single<Value> { 

    if (subject == null) { 
     subject = BehaviorSubject.create<Value>() 

     someOtherThing.retrieveValueAsync { value -> 
      subject.onNext(value) 
     } 
    } 

    return subject.singleOrError() 
} 

これは、私は一度だけの操作を実行し、将来のすべての利害関係者へのシングルとして結果を送信することができます。ただし、動作しません。私は呼び出すまで、単一の値を放出しません。

subject.onComplete() 

しかし、被写体が完了すると、将来のことは、もはやそれを購読することができませんので、これは問題です。

別の観測値から値をキャッシュしてシングルに渡す適切な方法はありますか?ソースオブザーバブルが有効な値を出すと、自動的に被験者を完成させる方法があれば。 Single.cache()も有望ですが、その場合、私の価値が非同期で来るという事実をどのように処理するのかは分かりません。

私は何かばかげているように感じています。

答えて

0

この場合、SingleSubjectがあります。

コードベースで実験コードを使用しない場合は、ReplaySubject.createWithSize(1)を使用し、最後の値を失うことなくonCompleteを呼び出してからSingleに変換します。

関連する問題