Dart 如何捕获计时器函数调用中抛出的错误?
我的代码类似于:Dart 如何捕获计时器函数调用中抛出的错误?,dart,Dart,我的代码类似于: timer = new Timer(new Duration(milliseconds: 1000), () => (throw new TimeoutException('Callback not invoked!'))); while (timer.isActive){ await new Future.delayed(const Duration(milliseconds: 1), () => "1"); } print('this
timer = new Timer(new Duration(milliseconds: 1000), () => (throw new TimeoutException('Callback not invoked!')));
while (timer.isActive){
await new Future.delayed(const Duration(milliseconds: 1), () => "1");
}
print('this should not be reached if the exception is raised');
在其他地方,我有一个异步回调,它调用:
timer.cancel();
在调用回调的情况下,它可以正常工作,因为回调会取消计时器
但是,如果没有取消,我不确定在这种情况下如何捕获TimeoutException
,因为异常似乎是在与我的主函数不同的范围内引发的。这意味着即使
有没有办法进行某种尝试/捕获或以某种方式处理上述超时异常?或者一个更好的方法来做我想做的事情
使用dart 1.19.1.根据超时是
500ms
还是1500ms
,您会得到不同的行为:
final timer = new Future.delayed(const Duration(milliseconds: 1000),
() => (throw new Exception('Callback not invoked!')))
.timeout(const Duration(milliseconds: 500));
try {
await timer;
} on TimeoutException catch(e) {
print('this should not be reached if the exception is raised');
} on Exception catch(e) {
print('exception: $e');
}
您确定需要
计时器吗?使用Future.delayed().timeout…
?@GünterZöchbauer如果这是一个更好的选择,我非常愿意使用它。我最初使用计时器是因为我实际上可以跟踪整个回调所需的时间,但无法使用基于未来的操作。我如何在其他回调中取消未来的计时器?以前我只能timer.cancel()
这是有效的,但我不清楚在另一个回调发生超时之前如何解决未来问题?我明白了。我没想到。我认为没有办法取消一个未来的。另见,