2017-01-30 6 views

答えて

1

はあなたの最初の加入者は、aをサブスクライブ:出力期待

a = new Rx.Subject(); 
 
b = a.publishReplay(1).refCount(); 
 

 
a.subscribe(function(x){console.log('timely subscriber:',x)}); 
 
a.next(1); 
 
b.subscribe(function(x){console.log('late subscriber:',x)});
<script src="http://reactivex.io/rxjs/user/script/0-Rx.js"></script>

少なくとも1人の加入者です(bではなく、aが加入しているため、加入者は1人もいません)。

a = new Rx.Subject(); 
 
b = a.publishReplay(1).refCount(); 
 

 
b.subscribe(function(x){console.log('timely subscriber:',x)}); 
 
a.next(1); 
 
b.subscribe(function(x){console.log('late subscriber:',x)});
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

9

あなたはa.next(1)publishReplay(1)呼び出し時にそのソース観察可能(件名この場合はa)に加入していないため、内部ReplaySubjectが値を受信しませんので、これが起こります1

RxJS 5では、チェーンの最後(この例ではb.subscribe(...))で購読すると、演算子間の実際のサブスクリプションが発生します。参照:

あなたは演算子はちょうどオペレータのインスタンスを取り、新しい観測に割り当てlift()方法のおかげで連鎖されsubscribe()を呼び出すまで。上の2つのリンクで確認できるように、operator.call()メソッドは、後でサブスクライブするときに呼び出されます。参照:

関連する問題