2017-02-10 3 views
1

私はstartWithを使用する必要があると知っていますが、使い方を理解しようとしています。 Subject.create().startWith("Some Value)とすれば、SubjectObservableになり、nextを送信することはできません。RXJS件名、すべての最初のサブスクリプションで同じ値を返す

したがって、複数のユーザはsubscribeにできるはずです。 Subjectnextに電話できる必要があります。 Subject.create()のドキュメントを見ていますが、遅くなります。

編集: 私は受け入れられたソリューションを使用した後に動作するようになった。私が.nextコールをサブスクリプションの中に入れたので、それが前に動作していなかった理由がありました。

例:

observable.subscribe((res) => { 
// do something 
s.next('another res'); 
} 

これは無限ループを作成し、私はRXJSがそれを防ぐと思いますか?とにかく、デバッグの目的でそこにnextを入れます。私はそれをsubscribeブロックの外に移動し、今度は最初の結果が出て、nextが呼び出されたときには、subscribeが何であっても再び放射します。

答えて

1

Subject.create()は使用しないでください。ちょうどSubject()を使用してください。参照:Subject vs AnonymousSubject

だけSubjectインスタンスへの参照し、必要観察可能なチェーンへの別の参照保つ:私はこれをやってみましたが、私はnext`に `を呼び出すときに観察を出さない

let s = new Subject(); 
let observable = s.startWith("Some initial message"); 

observable.subscribe(...); 
s.next('whatever'); 
+0

を's' –

+0

マーティンありがとう、デバッグのためにサブスクリプションの中に' next'を置くと、RXJSが私の愚かな無限ループをブロックしたと思います。それを横に動かせば、最初と次の両方が通過します。 –

関連する問題