自定义映射函数用于可观察

时间:2017-03-09 22:10:12

标签: javascript angular rxjs5

我有一个角度服务,我想返回一个我在界面中定义的对象。

我所遵循的教程假设响应与接口相同,但在我的场景中,我想稍微处理一下对象,以便只返回一些数据。

基于本教程的服务方法是:

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对象的逻辑?我基本上需要访问一个数组然后迭代它来填充返回对象。

2 个答案:

答案 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
                      })

注意:在服务中拥有业务逻辑是不好的做法,因为它们可以重用并构建不同的数据集(其他一些自定义映射)