Angular HTTP-可观察:如何修改教程代码以处理完整响应并仍然返回英雄[]



可能重复的澄清:问题旨在询问如何观察完整的反应并返回身体;不是"如何读取标题"

我正在学习Angular,并经历了《英雄之旅》教程。

我想修改以下代码以获取完整响应,以便我可以从标题中获得链接,然后仍然返回英雄[]。

/** GET heroes from the server */
getHeroes (): Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
    .pipe(
    tap(heroes => this.log(`fetched heroes`)),
    catchError(this.handleError('getHeroes', []))
    );
 }

https://angular.io/tutorial/toh-pt6#tap-into-the-observable

好吧,如果我正确理解您,您要通过其他参数{ observe: "response" },那么您可以通过res.headers访问标题,而响应主体则可以通过res.body

return this.http.get<Hero[]>(this.heroesUrl { observe: "response" })
    .pipe(
    tap(res => this.log(`fetched extended response`)),
    catchError(this.handleError('getHeroes', []))
    );
 }

基于 @jonrsharpe的反馈,我正在寻找的代码是:

getHeroes (): Observable<Hero[]> {
  return this.http.get<Hero[]>(url,{observe: "response"})
  .pipe(
    tap(res => this.log("headers:" + JSON.stringify(res.headers)) ),
    map(res => res.body),
    catchError(this.handleError('getHeroes', []))
  );
}

我需要此"地图(res => res.body)",以观察响应并仍然返回身体。

  getHeros(): Observable<Hero[]> {
    if (this.heros) {
      return of(this.heros);  
    }
    return this.http
      .get<Heros[]>(this.herosPath)
      .pipe(
        tap(data => console.log(JSON.stringify(data))),
        tap(data => (this.patients = data),
        catchError(this.handleError))
      );
  }

最新更新