【发布时间】:2017-08-17 15:03:43
【问题描述】:
我需要捕获任何前端(angulardart)错误并将其发送回服务器。
我在常规 Angular ErrorHandler 中看到了类似他的东西,但我在 Angular dart(或 dart 它自己)中找不到任何等价物。
也许我应该破解 Exception 对象的构造函数,但我认为它不是一个好方法(假设它是可能的)
请给点提示?
【问题讨论】:
标签: dart angular-dart
我需要捕获任何前端(angulardart)错误并将其发送回服务器。
我在常规 Angular ErrorHandler 中看到了类似他的东西,但我在 Angular dart(或 dart 它自己)中找不到任何等价物。
也许我应该破解 Exception 对象的构造函数,但我认为它不是一个好方法(假设它是可能的)
请给点提示?
【问题讨论】:
标签: dart angular-dart
在 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?
【讨论】:
ErrorHandler。如果你抓住他们并想要报告他们,请使用try { ... } catch(e, s) { logService.logException(e, s); rethrow; }。我认为如果你能处理它们,它们并不是真正的错误,应该没有必要报告它们。如果你不能处理它们,你不应该抓住它们,然后它们将由ErrorHandler 处理。