Можно ли объединить 2 http-ответа в один в Angular? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть Angular 6 приложение и внешняя служба api, которая возвращает максимум 50 записей на запрос.Но в некоторых случаях мне нужно получить 100 записей.

Например, следующий запрос даст мне первые 50 записей:

www.example.com/records/?count=50

Следующие 50:

www.example.com/records/?count=50&lastID=FAKEID

Есть ли рекомендация отправлять 2 HTTP-запроса в одном методе углового обслуживания, но возвращать оба ответа вместе?

1 Ответ

0 голосов
/ 26 февраля 2019

Вам нужно использовать forkJoin из rxjs

import { forkJoin } from "rxjs/observable/forkJoin"; // Maybe import from 'rxjs' directly (based on the version)

...

public multipleRequestMethod() {
    const firstCall = this.http.get('www.example.com/records/?count=50');

    const secondCall = this.http.get('www.example.com/records/?count=50&lastID=FAKEID');

    return forkJoin(firstCall, secondCall).pipe(
        map([firstResponse, secondResponse] => [...firstResponse, ...secondResponse])
    )
}

Дополнительная информация: Здесь

Если вы хотите использовать ответ от первого запроса, тогда вам нужно использовать flatMap/ switchMap

import { map, flatMap } from 'rxjs/operators';

...

public multipleRequestMethod() {
    return this.http.get('www.example.com/records/?count=50').pipe(
        flatMap(firstResult => {
            return this.http.get('www.example.com/records/?count=50&lastID=' + firstResult[firstResult.length - 1].id).pipe(
                map(secondResult => [firstResult, secondResult])
            );
        })
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...