[英]Getting a Full Response (not just the body) from Angular 4 HTTP Calls
我正在嘗試從HTTP調用中獲得完整響應。 根據Angular文檔,我應該將我的HTTP調用“選項”設置為{observe: 'response'}
如果我這樣做,我會收到以下錯誤:
Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'Observable<IItem[]>'. Type 'HttpResponse<IItem[]>' is not assignable to type 'IItem[]'. Property 'includes' is missing in type 'HttpResponse<IItem[]>'.
我認為我關於Observables和Typing / Casting的概念並不是那么清楚。
我有一個HTTP Get請求,它返回一個observable和Strong輸入一個項目數組(見下文)
getItems(): Observable <IItem[]>{
return this._http.get<IItem[]>(url, {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
};
我嘗試設置getUsers(): Observable <HttpResponse<IUser[]>>
,它解決了上述錯誤,但在我的subscribe
當我嘗試將返回的數據分配給本地變量this.item = data;
時,我收到以下錯誤this.item = data;
將item
聲明為item: Item[]
Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'IItem[]
所以我的問題是:
._http.get<IItem[]>
已經設置了預期的響應“類型”,我還需要設置getItems(): Observable <IItem[]>
方法返回類型嗎? 我想我不理解導致這種混亂的一些基本概念。 任何幫助將不勝感激。 我是Angular 4的新手,所以請保持溫柔。
HttpClient.get
方法定義為使用泛型類型T
:
get<T>(url: string, options?: {
...
}): Observable<T>;
因此,既然你將<IItem[]>
傳遞給get
方法, this._http.get<IItem[]>
根據定義, get
方法返回HttpResponse<IItem[]>
對象。 但是,您聲明您的方法getItems
返回IItem[]
,因此您得到錯誤:
類型'Observable <HttpResponse <IItem [] >>'不能分配給'Observable <IItem []>'。
要修復它,您需要返回IItem[]
。 這可以通過從HttpResponse<IItem[]>
提取IItem[]
類型的主體並返回它來完成。 do
這樣,你必須使用運營商不能返回任何map
操作為:
this._http.get<IItem[]>('url', {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
.map(data => data.body)
這應該工作:
getItems(): Observable <IItem[]>{
return this.http
.get<IItem[]>(url, {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
.map( (r: HttpResponse<IItem[]> ) => r.body )
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.