我如果服務器與4XX的catch
部分稱爲迴應說調用APIAngular 2.如何使用Observable中的重定向處理4xx錯誤?
getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError)
}
的服務。 這是我的handleError
方法。
private handleError = (error: any) => {
//Here I want to redirect to login.
}
我想重定向到login
頁面。 只需輸入this._router.navigate(['Login']);
不起作用,因爲我必須返回Observable
。 返回一個空的Observable return Observable.empty;
也不起作用,因爲那樣我的用戶就會收到錯誤:Cannot read property 'subscribe' of undefined
。
我該如何實現將用戶重定向到登錄頁面?當然,我可以更改我的訂閱者,以便通過訂閱者捕獲錯誤並重定向。但我認爲在我的服務中處理錯誤更好。
我也對如何處理4xx錯誤的完全不同的解決方案開放。編輯: 感謝@GüntherZöschbauer。 return Observable.of([]);
正是我所需要的。然而,請注意this
。爲了在.catch(this.handleError.bind(this))
getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError.bind(this))
}
訪問在handleError
方法使用bind(this)
的router
否則你不必訪問您的router
。
'empty'是一個功能,你需要實際調用它來獲得實際觀察到的:'返回Observable.empty();' – Brandon
你也可以使用箭頭函數'.catch((err)=> this.handleError(err))' –
我發現箭頭函數是一個更簡潔的方法來使用'this',而不是綁定。 – Joao