javascript - RxJs - 没有订阅者处理错误时的默认错误处理程序
问题描述
我正在为我的 Angular 6 应用程序中的 RxJs寻找一个可覆盖的默认错误处理程序。寻找以下行为
我的服务.ts
getArticle(id: string) {
return this.http.get<Article>(`/api/articles/${id}`).pipe(
defaultHandler(err => {
console.log('Default error handler', err);
// TODO Show dialog saying: err.data.msgFromServer || 'Unknown error'
})
);
}
案例 1:没有订阅者处理错误
myService.getArticle('1234').pipe(map(...), ...otherOperators)
.subscribe(this.onNext); // Default error handler HttpErrorResponse {...}
案例 2:至少一个订阅者处理错误
myService.getArticle('1234').pipe(map(...), ...otherOperators)
.subscribe(this.onNext, err => console.log('Hi from subscriber'));
// Hi from subscriber
解决方案
这handleError()
是您的 http 拦截器的默认错误处理程序的示例。它在这里处理一般的 http 错误并将其 parameter( 'Error Occured'
) 发送到您订阅的任何地方postCall()
。
export class Http extends HttpClient {
constructor(httpHandler: HttpHandler) {
super(httpHandler);
}
postCall(url: string, body, options?): Observable<any> {
return super.post(url, body, options)
.pipe(
tap(response => { console.log(response) }),
catchError(this.handleError('Error Occured')));
// 'Error Occured' or anything here goes to anywhere you subscribe postCall() as response
}
private handleError<T>(result?: T) {
return (error: any): Observable<T> => {
console.error('Status: ', error.status); // Example output 'Status: 401'
return of(result as T);
};
}
}
推荐阅读
- c - 带有函数指针参数的函数指针
- angular - 服务构造函数调用了两次
- java - 颤振应用程序无缘无故崩溃:E / Surface(6317):queueBuffer:错误将缓冲区排队到SurfaceTexture,-22
- julia - Floatmax 未定义阻止我解决 MIP
- javascript - 转换数据时 obj[i] 在 javascript 中不可迭代
- excel - VBA 将整个数据集移动到不同的行和列中
- python - SQLAlchemy中与关联代理的自引用多对多关系
- powershell - 如何以与 PowerShell 脚本不同的用户身份运行 exe?
- ruby - Rspec 存根 current_user
- sql - 使用 Codeigniter 加入 Tables 进行计数