Я очень новичок в RxJS, и вот моя история. Я хочу, чтобы «сеанс» наблюдался, поэтому новые подписчики всегда будут получать текущий сеанс, а затем все новые сеансы, если они могут появиться. Так что я написал что-то вроде этого:Как заставить publishReplay() пересылать подписку?
var session = Rx.Observable.from([0,1,3])
.do(x => console.log("Useful job"))
.publishReplay(1)
.refCount();
var subscr1 = session.subscribe(x => {
console.log("sub1 = " +x)
//subscr1.unsubscribe();
})
console.log("Completed");
subscr1.unsubscribe();
session.subscribe(x => {
console.log("sub2 = " +x)
});
И выход:
Useful job
sub1 = 0
Useful job
sub1 = 1
Useful job
sub1 = 3
Completed
sub2 = 3
Почему нет никакой полезной работы, когда SUB2 выписывает? Я ожидаю, что будет совсем холодно!
Извините, это был всего лишь образец. Исходный «сеанс» на самом деле довольно сложный. Он подключается к EventSource, делает много вещей. И затем испускает объект «сеанс». В какой-то момент он может повторно подключиться и испустить объект «новая сессия». Обычно он заканчивается только «событием выхода». Теперь в следующем событии «Логин» я хочу, чтобы он повторил сеанс, наблюдаемый при повторном подключении. И это не так. – norekhov
@norekhov Можете ли вы сделать демо-симуляцию этой проблемы? Я, вероятно, не понимаю, что такое порядок событий и что такое 'session'. – martin
Imagine Rx.Observable.from ([0,1,3]) является наблюдаемым, который редко испускает новые сеансы. В какой-то момент сеанс «3» становится неактивным. Второй наблюдаемый получает «3», в то время как я хочу, чтобы сеанс наблюдался для перезапуска. – norekhov