AngularHTTP-Observable:如何修改教程代码以处理完整响应并仍然返回Hero[]

AngularHTTP-Observable:如何修改教程代码以处理完整响应并仍然返回Hero[],angular,observable,Angular,Observable,对可能重复的问题进行澄清:该问题的目的是询问如何观察完整的回答并归还尸体;不是“如何阅读标题” 我正在学习《英雄之旅》教程 我希望修改下面的代码以获得完整的响应,这样我就可以从标题中获得链接,然后仍然返回Hero[] /** GET heroes from the server */ getHeroes (): Observable<Hero[]> { return this.http.get<Hero[]>(this.heroesUrl) .pipe(

对可能重复的问题进行澄清:该问题的目的是询问如何观察完整的回答并归还尸体;不是“如何阅读标题”

我正在学习《英雄之旅》教程

我希望修改下面的代码以获得完整的响应,这样我就可以从标题中获得链接,然后仍然返回Hero[]

/** 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', []))
    );
 }
/**从服务器获取英雄*/
getHeroes():可观察{
返回this.http.get(this.heroesUrl)
.烟斗(
点击(英雄=>this.log(`fetched heros`)),
catchError(this.handleError('getHeroes',[]))
);
}

如果我理解正确,您希望传递附加参数
{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', []))
    );
 }
返回this.http.get(this.heroesUrl{observe:“response”})
.烟斗(
轻触(res=>this.log(`fetched extended response`)),
catchError(this.handleError('getHeroes',[]))
);
}

根据@jornsharpe的反馈,我想要的代码是:

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', []))
  );

}
getHeroes():可观察{
返回this.http.get(url,{observe:“response”})
.烟斗(
轻触(res=>this.log(“headers:+JSON.stringify(res.headers)),
映射(res=>res.body),
catchError(this.handleError('getHeroes',[]))
);
}
我需要这个“map(res=>res.body)”,来观察响应并仍然返回body。

getHeros():Observable{
  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))
      );
  }
如果(这是英雄){ (这位英雄)归来; } 返回此文件。http .得到(这个,herosPath) .烟斗( 点击(data=>console.log(JSON.stringify(data)), 点击(数据=>(this.patients=数据), catchError(this.handleError)) ); }
获取完整响应意味着?@RahulSingh此代码仅获取(观察)响应主体。我想从标题中提取完整的httpResponse,然后传递到正文中。@jornsharpe我看了这个问题-使用.subscribe(),上面的代码使用.pipe()-我不确定它如何回答我的问题question@steve我想约翰·林克斯回答了你的问题,对吗?是的,这就是我想做的,但是我想:“回答”破译密码。因为HttpResponse无法转换为Observable@steve是的,因为您说您的方法应该返回
可观察的
,然后实际返回
可观察的
。更改签名,或者使用RxJS操作符将主体提取为管道的一部分。您不能既更改请求返回的内容,又期望签名保持不变;您必须进行调整。@jornsharpe This“或使用RxJS操作符提取身体”有帮助。但是,标题并非如预期的那样。我正在更新这个问题。