我提供了两个REST API,分别称为Product和Price。
我所面临的问题是按产品名称搜索时。用户将提供一个“查询”,并且产品API将返回与此名称匹配的所有产品。然后,我需要获取此列表,在每个项目之间循环以获取sku,然后调用价格API以获取价格信息。
我用于“产品”和“价格”的方法是:
getProductListByQuery(query: string): Observable<Product[]> {
return this.http.get<Product[]>(this.productEndpoint + '/' + query);
}
getPriceBySku( sku: string): Observable<Price> {
return this.http.get<Price>(this.priceEndpoint + '/' + sku);
}
产品对象如下:
import { Price } from './inventory';
export class Product {
sku: string;
name: string;
status: string;
price: Price;
}
我想遍历所有产品并更新价格。
我已经尝试过使用forkJoin,mergeMap,switchMap,concatMap以及任何我可以阅读的内容...但是我认为归结为我只是不了解自己在尝试什么要做...这将解释为什么我不了解结果。
我的方法如下:
getProductandPriceByQuery(query: string): Observable<Product[]> {
return this.productService.getProductListByQuery( query ).pipe(
// I want to loop through each Product and add Price.
// I am just stumped.
}
答案 0 :(得分:0)
这可能是一种方法:
getProductandPriceByQuery(query: string): Observable<Product[]> {
return this.productService.getProductListByQuery( query ).pipe(
switchMap(products => {
const productWithPriceObservables = products.map(product => {
return this.productService.getPriceBySku( product.sku )
.pipe(
map(price => Object.assign(product, {price: price}))
);
});
return combineLatest(productWithPriceObservables);
})
)
}
对于每个产品,我都询问价格,然后将价格合并到产品中:
map(price => Object.assign(product, {price: price}))
在返回所有内容之前,我使用CombineLatest等待所有价格返回。