У меня есть тема воспроизведения, как показано ниже:
@Injectable()
export class ViewByService implements OnDestroy {
private _selectedViewBy$ = new ReplaySubject<ViewByContext>(1);
public selectedViewBy$ = this._selectedViewBy$.asObservable();
constructor() {}
setViewBy(viewBy: ViewByContext): void {
this._selectedViewBy$.next(viewBy);
}
ngOnDestroy(): void {
this._selectedViewBy$.complete();
}
}
Когда я подписываюсь после того, как значение было отправлено, я получаю последнее значение, как и ожидалось, так как мой bufferCount
равен 1.
ЧТО МНЕ НУЖНО
На стороне потребителя, когда я подписываюсь на этот ReplaySubject
, если он имеет значения, отправленные раньше, чем я должен получить последнее значение, но если я не выпустил любое значение из этого ReplaySubject
, тогда я хочу startWith
некоторое значение по умолчанию. Но мое startWith
должно только значение pu sh, если нет значений, излучаемых из ReplaySubject
.
Теперь, когда я делаю это:
this.viewByService.selectedViewBy$.pipe(
startWith({ code: 'DEFAULT'})
)
Когда у меня нет значений, излучаемых с ReplaySubject
я нажимаю DEFAULT
, что нормально, но когда у меня есть значения в моем ReplaySubject
, я вижу, что оно нажимает как DEFAULT
, так и значение, которое было передано ранее.
Как мы можем условно запустить startWith
тогда и только тогда, когда мой ReplaySubject
ранее не выдавал никакого значения.
Спасибо.