RxJs 6 - Сделайте 2 HTTP-вызова и дождитесь всех ответов

@Effect()    
initDomain$: Observable<Action> = this.actions$.pipe(
  ofType('INIT_DOMAIN'),
  mergeMap((action: any) =>
     this.http.get('https://demo.api/url1.php').pipe(
        switchMap((data) => [
           {type: 'INIT_IT', payload: data}
        ]),
        catchError(() => of({type: 'INIT_IT_FAILED'}))
     )
  )
);

У меня есть угловой эффект (ngrx), который делает 1 запрос перед продолжением. Как я могу сделать 2 запроса и дождаться обоих ответов, прежде чем продолжить? Я знаю, что forkJoin () - это ответ, но меня немного смущает синтаксис


person Michalis    schedule 19.07.2018    source источник


Ответы (1)


forkJoin(
 this.http.get('myUrl'),
 this.http.get('myOtherUrl')
)

ИЛИ, если у вас есть набор наблюдаемых в массиве, вы также можете написать

const myArrayOfObservables = [
  this.http.get('myUrl'),
  this.http.get('myOtherUrl')
];

forkJoin(
  myArrayOfObservables
)

Это потому, что "forkJoin" использует оператор "spread" (... args) для своих параметров.

person JanRecker    schedule 19.07.2018
comment
Обратите внимание, что все obs будут считаться неудачными, если одно из них не удалось при использовании forkJoin, тогда как некоторые вызовы могли быть успешными. - person maxime1992; 19.07.2018