gpt4 book ai didi

angular - 错误处理程序和 RxJS 6.2.2

转载 作者:太空狗 更新时间:2023-10-29 17:56:16 25 4
gpt4 key购买 nike

我有一个带有这样的 globalError 处理程序的应用程序:

import { Injectable, ErrorHandler, Injector } from "@angular/core";
import { Router } from "@angular/router";

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {

constructor(
private injector: Injector) { }


public handleError(error: any) {
console.error("Something went wrong");
//.. Handle error here
}
}

这在每个星座中总是有效的。如果抛出错误,全局处理程序会捕获并处理它。

升级到 RxJs 6.2.2 后,我了解到捕获 http 错误发生了变化。

代码错误仍然有效,但 HttpClient 抛出的错误不会被全局捕获。不再触发 GlobalErrorHandler。

我知道我可以在我的服务中处理错误,并且可以像这样正常工作:

doSomething() {
return this.http
.get("http://someURL").pipe(
map((res: any) => { console.log(res) }),
catchError(this.handleError<any>(`blabla`))
);
}

/**
* Handle Http operation that failed.
* Let the app continue.
* @param operation - name of the operation that failed
* @param result - optional value to return as the observable result
*/
private handleError<T>(operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
console.log("Now throwing error");
// TODO: send the error to remote logging infrastructure
console.error(error); // log to console instead
// Let the app keep running by returning an empty result.
// ToDo: Global Error handler hier aufrufen....
return of(result as T);
};
}

但实际上我想集中处理所有错误。

Angular 6 和 RxJs 6 集中处理错误的正确方法是什么?

最佳答案

嗯,你试过了吗?在我当前的 Angular 6 应用程序中,当没有其他人捕获到错误的 HTTP 结果时,将调用全局 ErrorHandler。然后事件遍历整个流,运行到订阅回调,没有找到错误函数,然后直接进入全局错误处理。

所以对我来说效果很好。 ( Angular 6.0.9,RXJS 6.2.1)

我个人非常喜欢在大部分时间使用特定的 rxjs 错误捕获。它允许特定的响应。对于一些 HTTP 错误,我想尝试重试,对于一些,可以使用默认值,而对于一些,我必须举起红旗,让应用程序死得漂亮。

最好的是,您可以在非常接近调用的地方捕获错误,处理它(例如重试或返回默认值)并且订阅者甚至希望意识到错误处理处于事件状态。

我使用全局 ErrorHandler,它的 catchAll 逻辑主要只是作为最后一道防线。

亲切的问候

关于angular - 错误处理程序和 RxJS 6.2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51492577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com