Я не могу понять, как 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();
дает следующий результат:
call observerA: 5
observerB: 5 вызов observerB: 5
observerC: 5 observerC: 5 call observerC: 5
observerD: 5 observerD: 5 observerD: 5 call observerD: 5
1) Почему observerB, C и D называются многократно?
2) Почему "вызов" печатается на каждой строке, а не в начале строки?
Кроме того, если я вызываю publishReplay(1).refCount()
, он вызывает observerB, C и D 2 раза каждый.
Я ожидаю, что каждый новый наблюдатель получает значение 5 ровно один раз, а "вызов" печатается только один раз.