Как объединить запросы в массив в angular?

avatar
mx_code
1 июля 2021 в 19:29
49
1
1

Как объединить два ответа в массив в angular?

Ниже приведены HTTP-запросы к двум конечным точкам. Как я могу объединить их оба и предоставить возвращаемое значение в виде массива?

Вот так:

postCombined() {
    return combineLatest([this.link1$, this.link2$])
      .pipe(
        mergeMap(([link1, link2]: [string, string]) => {
         return [
           this.http.post(link1, values1, { headers }),
           this.http.post(link2, values2, { headers }),
         ];
        })
      )
      .subscribe(console.log);
}

Моя реализация правильная? или мне нужно использовать forkJoin?

Источник

Ответы (1)

avatar
Kinglish
1 июля 2021 в 20:46
1

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

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

postCombined() {
  return combineLatest([this.link1$, this.link2$])
    .pipe(
      let http1$ = this.http.post(link1, values1, {
        headers
      }), http2$ = this.http.post(link2, values2, {
        headers
      })
      forkJoin([https1$, http2$])
    )
    .subscribe(console.log);
}

Взято из этой статьи