我正在對我的 Angular 應用程式進行一些重構,并實作像常見的 ErrorHttpInterceptor 這樣的攔截器。
在我的測驗中,我注意到我的問題是,如果我在我的 observables 請求中從訂閱中洗掉“錯誤”引數,它會觸發一個錯誤。如果我讓它在那里,訂閱錯誤會觸發,但顯然我的應用程式不會中斷。
我說顯然是因為我無法正確測驗應用程式是否中斷。
這是我的“測驗”方法:
testAPI(){
this.myservice.getRequest().subscribe({
next: data => console.log(data),
error: error => console.log(error)
});
}
這是我簡化的 ErrorInterceptor:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError(error => throwError(() => error))
);
}
我想知道像這樣離開我的訂閱是否可以或可靠:
testAPI(){
this.myservice.getRequest().subscribe({
next: data => console.log(data)
});
}
并且完全信任 ErrorInterceptor 來捕獲和處理錯誤
uj5u.com熱心網友回復:
如果您希望您的攔截器完成所有 Http 錯誤處理,那么使用 Promises 而不是使用訂閱是一種更簡潔的方法
這是一種更清潔的方法:
像你一樣實作你的攔截器,但在你的 catchError 方法中回傳一個 EMPTY 而不是拋出并執行錯誤的 console.error() (你也可以在 toast 中添加錯誤),因為你不想要你的應用程式要在每次發生錯誤時中斷,您希望它繼續。
在您發出 API 請求的服務中:
async saveAddressDetails(user: User): Promise<any> {
return await this.http.post<any>(`${this.authURL}update/address`, user).toPromise();
}
在您使用 HTTP 請求的組件中:
const result = await this.auth.saveAddressDetails(this.auth.user);
if (result) {
this.toast.success('Address Details saved');
}
請注意,如果您有錯誤,則結果將為空,因此不會計算 if 中的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532583.html
標籤:有角度的