2017-02-24 7 views
1

コードRx.Subjectは熱く観測可能ですか?

const a = new Rx.Subject().do(x => console.log('a')) 
const b = a.mapTo(0) 
const c = a.mapTo(1) 
const d = Rx.Observable.merge(b, c) 
d.subscribe(x => console.log('d')) 
a.next(3) 

と出力

a 
d 
a 
d 

はなぜ二度印刷されてしまったのでしょうか? Rx.Subjectは熱く観測可能ではありませんか?

+0

、呼び出しは2つのHTTPリクエストで二回の結果をフェッチし、実行している... –

答えて

3

Subject自体はホット/共有です。しかし

どれ(!ほとんどの)あなたがソースとして(この場合はSubjectに)以前の流れと、新しいストリームを作成します追加の演算子 - 新しいストリームを、しかし、(ほとんどの事業者のための)ではありませんホットのみホットオペレータ(のようなshareまたはpublish電気ショック療法...)予想通り

だからあなたはあなたのsharedo、すべてが動作するはず付加してホットストリームを導出することにより、ホット行われます。私のアプリケーションで

const a = new Rx.Subject().do(x => console.log('a')).share(); 
 
const b = a.mapTo(0); 
 
const c = a.mapTo(1); 
 
const d = Rx.Observable.merge(b, c) 
 
d.subscribe(x => console.log('d')); 
 
a.next(3);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

+0

うわー、おかげでたくさん! –

+0

私は内部のすべてのストリームに '.publishReplay(1).refCount()'を使用しています –

関連する問題