Не уверен, подходит ли это вашему сценарию, но я имел дело с этим и в прошлом и нашел, что лучше всего условно вернуть другую наблюдаемую после проверки какой-либо переменной инициализации.Ниже приведен рабочий пример того, что я имею в виду.
Компонент хочет получить список состояний из API
this.statesService.getStates()
.subscribe((states) => this.states = states);
Служба хочет получить состояния только один раз от API
private _states: IState[];
getStates(): Observable<IState[]> {
if (!this._states) {
// we don't have states yet, so return an observable using http
// to get them from the API
// then store them locally using tap
return this.http.get<IState[]>('/options/states').pipe(
tap((answer) => {
this._states = answer;
}),
);
} else {
// subsequent calls will just return an observable of the data needed
return of(this._states);
}
}
В приведенном выше случае легко вернуть условную наблюдаемую.Надеемся, что это даст вам некоторые идеи о том, как справиться с вашим условным сценарием (только при первой подписке).