В RxJS я хочу дать каждому новому подписчику последний элемент, который был испущен. Но как мне это сделать в цепочке наблюдаемых?Как «воспроизвести» последний испущенный элемент каждому подписчику?
this.http.get().map().replaySubject().refCount()
В RxJS я хочу дать каждому новому подписчику последний элемент, который был испущен. Но как мне это сделать в цепочке наблюдаемых?Как «воспроизвести» последний испущенный элемент каждому подписчику?
this.http.get().map().replaySubject().refCount()
Этот ответ относится к RxJS 5:
Один из способов будет использовать publishReplay
:
this.http
.get()
.map()
.publishReplay(1)
.refCount();
Если источник является, что завершает (который был бы типичным для отдыха-вызова, так как он завершается после получения ответа), вы также можете использовать publishLast
:
this.http
.get()
.map()
.publishLast()
.refCount();
И третий путь (который дает вам максимальную гибкость) будет использовать внешний BehaviorSubject
или ее ReplaySubject
:
public myData$: BehaviorSubject<any> = new BehaviorSubject(null); // initial value is "null"
public requestData(): BehaviorSubject<any> {
this.http
.get()
.map()
.do(data => this.myData$.next(data))
.subscribe();
return this.myData$.skip(1); // the returned subject skips 1, because this would be the current value - of course the skip is optional and depends on the implementation of the requesting component
}
В компоненте (ы) вы можете получить данные через myData$.subscribe(...)
для получения текущих «кэшированных» данных или через requestData().subscribe(...)
для получения последних данных.