Я не могу понять, как работает publishReplay().refCount()
.
Например (https://jsfiddle.net/7o3a45L1/):
var source = Rx.Observable.create(observer => {
console.log("call");
// expensive http request
observer.next(5);
}).publishReplay().refCount();
subscription1 = source.subscribe({next: (v) => console.log('observerA: ' + v)});
subscription1.unsubscribe();
console.log("");
subscription2 = source.subscribe({next: (v) => console.log('observerB: ' + v)});
subscription2.unsubscribe();
console.log("");
subscription3 = source.subscribe({next: (v) => console.log('observerC: ' + v)});
subscription3.unsubscribe();
console.log("");
subscription4 = source.subscribe({next: (v) => console.log('observerD: ' + v)});
subscription4.unsubscribe();
дает следующий результат:
вызов наблюдателяA: 5
наблюдательB: 5 вызвать наблюдателяB: 5
ObserverC: 5 ObserverC: 5 вызов ObserverC: 5
наблюдательD: 5 наблюдательD: 5 наблюдательD: 5 вызов наблюдателяD: 5
1) Почему наблюдатели B, C и D вызываются несколько раз?
2) Почему «звонок» печатается на каждой строке, а не в начале строки?
Кроме того, если я вызываю publishReplay(1).refCount()
, он вызывает ObserverB, C и D по 2 раза каждый.
Я ожидаю, что каждый новый наблюдатель получит значение 5 ровно один раз, а «вызов» будет напечатан только один раз.