如何按顺序发送独立的http请求

时间:2019-04-07 11:03:47

标签: angular rxjs

我想发送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 :(得分:0)

您需要改用concat

  

concat将订阅第一个输入Observable并发出其所有值,而不会以任何方式更改或影响它们。当该Observable完成时,它将订阅然后传递的下一个Observable,并再次发出其值。将重复此操作,直到操作员用完Observable。当最后一个输入Observable完成时,concat也将完成。

如果您随后想要将所有这些结果收集到一个数组中,则需要使用toArray运算符来折叠结果。

在您的情况下,它将类似于:

const batched = queryUrls.map(query => this.http.post(query.url, query.data))
concat(batched).pipe(toArray()).subscribe(allResults => /**/)