なぜpublishReplay(1).refCount()は、最近のサブスクライバの最後の値を再生しないのですか?なぜRxjs publishReplay(1).refCount()は再生しないのですか?
timely subscribe: 1
late subscriber: 1
refCount
最初の時にそこに流れを活性化させるため、実際の出力
timely subscriber: 1
なぜpublishReplay(1).refCount()は、最近のサブスクライバの最後の値を再生しないのですか?なぜRxjs publishReplay(1).refCount()は再生しないのですか?
timely subscribe: 1
late subscriber: 1
refCount
最初の時にそこに流れを活性化させるため、実際の出力
timely subscriber: 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>
あなたはa.next(1)
publishReplay(1)
呼び出し時にそのソース観察可能(件名この場合はa
)に加入していないため、内部ReplaySubject
が値を受信しませんので、これが起こります1
。
RxJS 5では、チェーンの最後(この例ではb.subscribe(...)
)で購読すると、演算子間の実際のサブスクリプションが発生します。参照:
あなたは演算子はちょうどオペレータのインスタンスを取り、新しい観測に割り当てlift()
方法のおかげで連鎖されsubscribe()
を呼び出すまで。上の2つのリンクで確認できるように、operator.call()
メソッドは、後でサブスクライブするときに呼び出されます。参照: