【问题标题】:catch any error in angular dart (like angular's ErrorHandler)捕捉 angular dart 中的任何错误(如 angular 的 ErrorHandler)
【发布时间】:2017-08-17 15:03:43
【问题描述】:

我需要捕获任何前端(angulardart)错误并将其发送回服务器。

我在常规 Angular ErrorHandler 中看到了类似他的东西,但我在 Angular dart(或 dart 它自己)中找不到任何等价物。

也许我应该破解 Exception 对象的构造函数,但我认为它不是一个好方法(假设它是可能的)

请给点提示?

【问题讨论】:

    标签: dart angular-dart


    【解决方案1】:

    在 Dart 中非常相似:

    @Injectable()
    class ErrorHandler implements ExceptionHandler {
      ApplicationRef _appRef;
    
      ErrorHandler(Injector injector) {
        // prevent DI circular dependency
        new Future<Null>.delayed(Duration.ZERO, () {
          _appRef = injector.get(ApplicationRef) as ApplicationRef;
        });
      }
    
      @override
      void call(dynamic exception, [dynamic stackTrace, String reason]) {
        final stackTraceParam = stackTrace is StackTrace
            ? stackTrace
            : (stackTrace is String
                ? new StackTrace.fromString(stackTrace)
                : (stackTrace is List
                    ? new StackTrace.fromString(stackTrace.join('\n'))
                    : null));
        _log.shout(reason ?? exception, exception, stackTraceParam);
    
        // We can try to get an error shown, but don't assume the app is
        // in a healthy state after this error handler was reached.
        // You can for example still instruct the user to reload the 
        // page with danger to cause hare because of inconsistent
        // application state..
        // To get changes shown, we need to explicitly invoke change detection. 
        _appRef?.tick();
      }
    }
    

    提供错误处理程序

    return bootstrap(AppComponent, [const Provide(ExceptionHandler, useClass: ErrorHandler)]);
    

    有关可能在 Angular 之外引起的错误,另请参阅 How to catch all uncaught errors in a dart polymer app?

    【讨论】:

    • 谢谢,这通常用于未捕获的异常。是否有解决方案来获得有关捕获的通知?
    • 不知道你对抓到的人是什么意思。这些是由您的自定义代码捕获的,还是在 Angular 的任何地方或应用程序中使用的任何组件中捕获的?
    • 我的意思是被我的自定义代码捕获。这些捕获可能应该由我自己的捕获逻辑集中处理?
    • 我在想,好像我的应用程序视图在后端(老派)中被处理,我的日志中的视图中会出现所有错误以及服务方法异常。如果 js 前端出现问题,我们无法知道它,除非我们捕获它并将其发送回服务器
    • 如果它们未被捕获,则调用上面的ErrorHandler。如果你抓住他们并想要报告他们,请使用try { ... } catch(e, s) { logService.logException(e, s); rethrow; }。我认为如果你能处理它们,它们并不是真正的错误,应该没有必要报告它们。如果你不能处理它们,你不应该抓住它们,然后它们将由ErrorHandler 处理。
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2018-12-18
    • 2022-07-23
    • 2020-03-18
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多