2

Angular 2 で Observables を使い始めたばかりで、質問があります。

データ サービス クラスに getExplorerPageData というメソッドがあります。これは、いくつかの配列を持つデータ構造を返す http 呼び出しを行います。getExplorerPageData() 呼び出しで取得された項目の 1 つを取得できる getTag という追加の関数が必要です。

明確にするために言うと、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 に答える