Angular 2 Observable Dataservice получить предмет наблюдаемой

Я только начинаю с Observables в Angular 2 и у меня есть вопрос.

В моем классе обслуживания данных есть метод 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
}

1 ответ

Вы можете добавить звонок в .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() возвращается.

Другие вопросы по тегам