我正在建立一个与许多API聊天的Angular网站,并且我一直遵循Angular docs尝试并使用最佳实践来发出HTTP请求并处理后续的成功与失败。
我已经对其中一个API进行了硬编码以返回500
错误,并且可以通过在{{中使用500
定义在Angular应用中成功处理该catchError
1}},在HTTP服务调用之后,代码如下:
pipe
我遇到的问题是,当我使用以下代码调用updateRemoteUserProfile(userProfile: UserProfile): Observable<UserProfile>{
return this.http.put<UserProfile>(AuthService.userProfileApi, userProfile).pipe(
catchError(this.handleError<UserProfile>('updateUserProfile', 'Error', 'Error updating profile', userProfile))
);
}
private handleError<T> (operation = 'operation', title, notification, result?: T) {
return (error: any): Observable<T> => {
this.toastrService.error(notification, title);
console.error(error);
return of(result as T);
};
}
时,subscribe方法始终执行,并且成功举杯消息与错误一同时弹出:
updateRemoteUserProfileMethod
我确定我缺少了一些非常简单和基本的内容,但是这些内容都是基于Angular文档,所以我现在很茫然。
非常感谢
答案 0 :(得分:3)
好吧,catchError
就是这样:您正在捕获错误,因此不再有错误。
如果您要传播错误,请
tap(null, handler)
传播原始错误,但在发生原始错误时增加副作用(例如记录或烘烤错误),或者throwError(...)
返回catchError
而不是of(...)
引发与原始错误不同的错误答案 1 :(得分:0)
我们还可以返回EMPTY()observable,它将通过执行subscribe complete方法来完成observable。
import {empty} from 'rxjs';
private handleError<T> (operation = 'operation', title, notification, result?: T) {
return (error: any): Observable<T> => {
this.toastrService.error(notification, title);
console.error(error);
return empty();
};
}