2

我刚刚开始使用 Angular 2 中的 Observables 并且有一个问题。

我的数据服务类中有一个名为 getExplorerPageData 的方法,该方法进行了一个 http 调用,该调用返回一个带有几个数组的数据结构。我想要一个名为 getTag 的附加函数,它可以检索在 getExplorerPageData() 调用中检索到的项目之一。

需要明确的是,我不想在调用 getTag 时再次访问服务器,我宁愿从已经对 getExplorerPageData() 进行的调用中检索项目。

我想知道最好的方法是什么?

getExplorerPageData(): Observable<IExplorerPageData> {
  return this.http.get(this.baseurl + "/explorerpagedata")
  .map((response: Response) => <IExplorerPageData>response.json())
  .catch(this.handleError);
}

getTag(id: number): ITag {
    //todo need to return one of the tags in explorerPageData.Tags
    return 
};

export interface IExplorerPageData{
 Tags: ITag[],
 Uploads: IUpload[],
}

export interface ITag {
  TagId: number,
  Title: string
}
4

1 回答 1

0

您可以将呼叫添加到.map(...)操作员或使用do(...)操作员:

getExplorerPageData(): Observable<IExplorerPageData> {
  return this.http.get(this.baseurl + "/explorerpagedata")
  .map((response: Response) => {
     var data = <IExplorerPageData>response.json();
     getTag(data);
     return data;
  })
  .catch(this.handleError);
}

或者

getExplorerPageData(): Observable<IExplorerPageData> {
  return this.http.get(this.baseurl + "/explorerpagedata")
  .map((response: Response) => <IExplorerPageData>response.json())
  .do((data) => getTag(data))
  .catch(this.handleError);
}

对于map()操作员来说,最后返回值很重要,因为返回的值是订阅者收到的。

对于do()运营商,返回值无关紧要,无论返回map()什么,从前一个返回的值都会转发给订阅者do()

于 2016-08-30T04:40:28.977 回答