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()
возвращается.