将两个数据源合并到一个接口
时遇到一个小问题有一个界面
export interface IProvince {
code: number;
name: string;
svgData: string;
part: number;
color: string;
}
现在我有两个不同的数据源,一个为字段提供数据: [code,name,svgData,part] , [color] 来自另一个observable。
getAllProvince(): Observable<IProvince[]>
{
return <Observable<IProvince[]>>this.http
.get('url')
.map((response: Response) => <IProvince[]>response.
.catch(this.handleError)
.finally(() => {
this.loader.complete();
console.log("Data: ", this.provinceData);
});
}
getLegendData(): Observable<ILegend[]> {
return Observable.of(this.legendData);
}
getStyleColorData(part: number) {
let color: ILegend;
return this.getLegendData().subscribe((items: ILegend[]) => color = items.find(p => p.part == part));
}
问题在于,目前我缺乏数据[颜色]我不知道如何&#34;在飞行中&#34;从另一个函数中添加值。
这里我有函数:getStyleColorData(part:number)应该给我&#34; color&#34;在我从[getAllProvince()]传递[部分]之后。 问题:有两种简单的方法可以将这两种方法结合起来,或者我的方向错误吗?
答案和解决方案的答案:)
答案 0 :(得分:0)
如果您有两个Observable(例如来自http请求,则可以将它们与Observable.combineLatest
或Observable.withLatestFrom
合并。
尝试这样的事情:
getProvinces() {
return this.http
.get('url')
.map(response => response.json() as IProvince[])
.withLatestFrom(this.getLegendData(), (provinces, legendData) => ({provinces, legendData})
.map(combined => combined.provinces.map(
province => province.color = combined.legendData.find(legend => legend.part == province.part).color));
}
getLegendData() {
return this.http
.get('url2')
.map(response => response.json() as ILegend[]);
}