我想使用角度服务中的httpClient从远程源获取几个不同ProductId的数据。 我想在服务中合并数据,然后将其返回。
仅使用一个productId,就可以正常工作:
getData(productId: string): Observable<any> {
const path = this.serverUrl + '?' + 'productId=' + productId;
return this.httpClient.get(path);
}
但是我如何遍历一系列产品ID,然后返回合并的结果?
getData(productIds: Array<string>): Observable<any> {
let data: Array<string>;
productIds.forEach(element => {
const path = this.serverUrl + '?' + 'productid=' + element;
data.push(this.httpClient.get(path));
});
return data;
}
感谢您的帮助!
答案 0 :(得分:1)
如果要并行请求其他产品,可以使用forkJoin运算符:
getData(productIds: Array<string>): Observable<any> {
const data = productIds.map(element => {
const path = this.serverUrl + '?' + 'productid=' + element;
return this.httpClient.get(path);
};
return forkJoin(...data);
}
答案 1 :(得分:1)
您可以尝试使用forkJoin
[P.S。]以下代码未经测试
let productAPIs = [1,2,3,4];
productIds.forEach(element => {
const path = this.serverUrl + '?' + 'productid=' + element;
productAPIs.push(this.http.get(path);
});
forkJoin(productAPIs).subscribe(results => {
// results[0] is your productId[0]
// results[1] is your productId[1]
});
答案 2 :(得分:0)
您应该看看the zip function from RXJS。它将来自不同可观察对象的所有结果组合到一个数组中。
getData(productIds: Array<string>): Observable<any> {
let data: Array<Observable<any>>;
productIds.forEach(element => {
const path = this.serverUrl + '?' + 'productid=' + element;
data.push(this.httpClient.get(path));
});
return zip(data);
}