Однократная операция по Первой подписке наблюдаемой - PullRequest
0 голосов
/ 02 мая 2019

Я использую Rxjs.У меня есть одна наблюдаемая и несколько подписок из разных источников.Я хочу активировать одну функцию только один раз после получения первой подписки на наблюдаемое.Есть ли способ добиться этого?

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Не уверен, подходит ли это вашему сценарию, но я имел дело с этим и в прошлом и нашел, что лучше всего условно вернуть другую наблюдаемую после проверки какой-либо переменной инициализации.Ниже приведен рабочий пример того, что я имею в виду.

Компонент хочет получить список состояний из 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);
        }
    }

В приведенном выше случае легко вернуть условную наблюдаемую.Надеемся, что это даст вам некоторые идеи о том, как справиться с вашим условным сценарием (только при первой подписке).

0 голосов
/ 02 мая 2019

Вы можете использовать операторы publishReplay (1), refCount ().Это обеспечит оценку наблюдаемого только один раз и предоставит один и тот же результат всем подписчикам.

...