私は、サーバーがcatch
部分が呼び出されるの4xxで応答した場合、API角度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
ページにリダイレクトします。 Observable
を返さなければならないので、単にthis._router.navigate(['Login']);
と入力しても機能しません。 Cannot read property 'subscribe' of undefined
という購読者にエラーが発生するため、空のObservable return Observable.empty;
を返すこともできません。
ユーザーをログインページにリダイレクトする方法を教えてください。もちろん、私はエラーをキャッチし、私の加入者を介してリダイレクトするように私の加入者を変更することができます。しかし、私は私のサービスのエラーを処理する方が良いと思います。
また、私は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