Подождите, пока две наблюдаемые не будут завершены - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу вызвать метод после того, как два Observables вернули значения.Я немного искал, и мне кажется, что forkJoin - это то, что я хочу, но я не могу заставить его работать.Я знаю, что оба эти Observable возвращают значения, так как я использую данные для каждого отдельно в другом месте компонента, поэтому я явно делаю что-то не так.

Вот что я попробовал.Я использую rxjs v6.4.

forkJoin(
  this.store.pipe(select(fromStore.getAppointmentsLoading)),
  this.clientStore.pipe(select(fromClientStore.getClientsLoading)),
).subscribe(
  ([res1, res2]) => {
    console.log('res1', res1);
    console.log('res2', res2);
  },
  err => console.error(err),
);

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

Я делаю что-то не так, или я использую forkJoin?

полностью неверный подход

1 Ответ

3 голосов
/ 14 апреля 2019

forkJoin испускается, когда все наблюдаемые завершены, а не когда они испускают.

Вместо этого вы можете использовать combineLatest.

Будьте осторожны, не импортируйтеоператор экземпляра от 'rxjs/operators'.Это распространенная ошибка, вызванная некоторыми функциями автоматического импорта в среде IDE.В этом случае нам нужна статическая версия, импортированная из 'rxjs':

import {combineLatest} from 'rxjs';

combineLatest(
  this.store.pipe(select(fromStore.getAppointmentsLoading)),
  this.clientStore.pipe(select(fromClientStore.getClientsLoading)),
).subscribe(
  ([res1, res2]) => {
    console.log('res1', res1);
    console.log('res2', res2);
  },
  err => console.error(err),
);
...