我有一个角度服务,我想返回一个我在界面中定义的对象。
我所遵循的教程假设响应与接口相同,但在我的场景中,我想稍微处理一下对象,以便只返回一些数据。
基于本教程的服务方法是:
getResults(): Observable<IPageSpeedResult> {
return this._http.get(this._pageSpeedApiUrl)
.map((response: Response) => <IPageSpeedResult> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
如何扩展map方法以包含我从我想要的返回数据构建IPageSpeedResult对象的逻辑?我基本上需要访问一个数组然后迭代它来填充返回对象。
答案 0 :(得分:3)
好吧,你可以在地图操作符中完成所有这些操作。
getResults(): Observable<IPageSpeedResult> {
return this._http.get(this._pageSpeedApiUrl)
.map((response: Response) => <IPageSpeedResult> response.json())
.map(data => this.transformData(data))
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
transformData(data: any) : IPageSpeedResult {
// do your magic here
}
答案 1 :(得分:2)
您可以根据业务逻辑将逻辑添加到服务方法或订阅数据
getResults(): Observable<IPageSpeedResult> {
return this._http.get(this._pageSpeedApiUrl)
.map((response: Response) => <IPageSpeedResult> response.json())
.do((data) => {
// your custom logic with the data
})
.catch(this.handleError);
}
订阅数据时
this.serviceObject.getResults()
.subscribe((data)=>{
// your custom logic with the data
})
注意:在服务中拥有业务逻辑是不好的做法,因为它们可以重用并构建不同的数据集(其他一些自定义映射)