我想发送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);
}
,我可以订阅此方法,并且可以将所有结果存储在数组中。但是如何依次发送所有请求?
答案 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 => /**/)