gpt4 book ai didi

dart - 如何全局捕获未处理的 Future 错误?

转载 作者:行者123 更新时间:2023-12-03 04:21:56 24 4
gpt4 key购买 nike

最佳实践当然是始终将错误处理程序附加到 Future使用 catchError() (或使用 awaittry/catch )。但是假设我忘记了,或者假设这个错误足够严重以至于我们希望它使整个应用程序崩溃(就像我们可以处理同步异常一样),或者我想记录错误,或者将它报告给像 Crashlytics 这样的服务让我意识到我的罪。

Dart Future s 实际上与 JavaScript 的 Promise 相同。 s。在 NodeJS 中,我们可以将处理程序附加到全局 unhandledRejection event添加自定义行为。

Dart 是否提供类似的功能?我查看了异步和 Future文档,但找不到任何相关内容。

最佳答案

看看 runZonedGuarded 静态方法。它将在自己的 Zone 中执行给定的方法这使得附加一个方法来处理任何 Uncaught Error 成为可能。

我在这里做了一个简单的例子,它显示了如果在不处理错误的情况下抛出异步错误会发生什么:

import 'dart:async';
import 'dart:io';

void main() {
runZonedGuarded(program, errorHandler);
}

Future<void> program() async {
final file = File('missing_file.txt');
await file.openRead().forEach(print);
}

void errorHandler(Object error, StackTrace stack) {
print('OH NO AN ERROR: $error');
}

返回:

OH NO AN ERROR: FileSystemException: Cannot open file, path = 'missing_file.txt'...

关于dart - 如何全局捕获未处理的 Future 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62115753/

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