Каква е практическата разлика между observable.publish().refCount()
и observable.share()
. Какъв би бил пример за сценарий, в който не искаме да използваме share
?
Разлика между `share()` и `publish().refCount()`
Отговори (2)
Няма практическа разлика, ако погледнете 'observable.prototype.share', ще видите, че той просто връща 'source.publish().refCount()'.
Що се отнася до това защо бихте искали да го използвате, по-скоро е въпрос на това колко контрол имате нужда върху това, когато вашият източник започне да излъчва.
Тъй като refCount()
ще прикачи основния наблюдаем при първото абониране, може да се окаже, че следващите наблюдатели ще пропуснат съобщения, които идват, преди да могат да се абонират.
Например:
var source = Rx.Observable.range(0, 5).share();
var sub1 = source.subscribe(x => console.log("Observer 1: " + x));
var sub2 = source.subscribe(x => console.log("Observer 2: " + x));
Само първият абонат ще получи стойности, ако искаме и двамата да ги получат, ще използваме:
var source = Rx.Observable.range(0, 5).publish();
var sub1 = source.subscribe(x => console.log("Observer 1: " + x));
var sub2 = source.subscribe(x => console.log("Observer 2: " + x));
source.connect();
Observable
от http-заявка с множество Observer
s. Инструментите за разработчици на моя браузър записват около 750 заявки за задача. Когато променя share()
на publish.refCount()
остават само 50 заявки за същата задача. Така че изглежда, че share()
не прави това, което трябва (споделете Observable
).
- person Springrbua; 24.05.2016
Според статия „Rxjs Observable public refcount vs share";
С observable.publish().refCount(), след като наблюдателят завърши, той няма да се рестартира, ако се добави нов абонат след завършването. Докато при observable.share(), ако основният наблюдател завърши и по-късно се добави нов абонат, наблюдателят ефективно започва ново изпълнение и започва да излъчва данни.