как отправить независимый http запрос в последовательности угловых - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу отправить 10 независимых запросов, один за другим по порядку.и хочу получить все результаты в массиве.Я пробовал forkJoin, но он ударил все запросы параллельно.

Для параллельных запросов

search(queryUrls) {
    queryUrls.forEach((query) => {
        observableBatch.push(this.http.post(query.url, query.data))
            .pipe(
                map((res) => res),
                catchError(e => of('Error'))
            );
    });

    //
    return forkJoin(observableBatch);
}

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

1 Ответ

0 голосов
/ 07 апреля 2019

Вместо этого вам нужно использовать concat.

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

Если вы хотите собрать все эти результаты в массив, вам нужно будет использовать оператор toArray для свертывания результатов.

В вашем случае это будет выглядеть примерно так:

const batched = queryUrls.map(query => this.http.post(query.url, query.data))
concat(batched).pipe(toArray()).subscribe(allResults => /**/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...