Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 未来的执行将导致未处理的异常_Dart_Future_Unhandled Exception - Fatal编程技术网

Dart 未来的执行将导致未处理的异常

Dart 未来的执行将导致未处理的异常,dart,future,unhandled-exception,Dart,Future,Unhandled Exception,要使用命名的可选参数-onError。这样做仍然会导致未处理的异常 我想再澄清一件事。我说得对吗这两种方法之间的唯一区别是.catchError()还处理内部期货(在外部期货的then()方法内部调用的期货)抛出的错误,而OneError只捕获外部期货抛出的错误 德米特里 谢谢。您的错误处理不起作用,因为错误是在代码的同步部分抛出的。仅仅因为该方法返回future,并不意味着该方法中的所有内容都是异步的 void main(){ 试一试{ 除以(1,0) 。然后((result)=>print(

要使用命名的可选参数-onError。这样做仍然会导致未处理的异常

我想再澄清一件事。我说得对吗这两种方法之间的唯一区别是.catchError()还处理内部期货(在外部期货的then()方法内部调用的期货)抛出的错误,而OneError只捕获外部期货抛出的错误

德米特里


谢谢。

您的错误处理不起作用,因为错误是在代码的同步部分抛出的。仅仅因为该方法返回future,并不意味着该方法中的所有内容都是异步的

void main(){
试一试{
除以(1,0)
。然后((result)=>print('1/0=$result');
}捕获(错误){
打印('分割期间发生错误:$Error');
}
}
如果更改
divide
函数,如

未来分割(int a,b){
返回新的未来(){
如果(b==0){
抛出新异常('除零');
}
返回新的未来值(a/b);
});
}
您得到一个异步错误,并且异步错误处理工作正常

一种更简单的方法是使用新的async/await

main()异步{
试一试{
等待除法(1,0);
}捕获(错误){
打印('分割期间发生错误:$Error');
}
}
尝试


另一个优点是这两种情况都适用。

谢谢您的回答。我是否正确理解,Wait/async是在1.9版本(最新版本)中引入的,它是futures的替代品?无论如何,我想了解我的例子有什么问题。我遗漏了一些东西,并更新了我的答案。async/await并不是future的替代品,它只允许您更轻松地使用future。看吧,哦,对了!现在我明白了。还有一个简短的问题。如果我使用的是您示例中修改过的除法函数,我是否可以只返回a/b而不是新的Future.value(a/b)?同时也感谢您提供的链接。是的,在这种情况下,
newfuture.value()
不是必需的。
import 'dart:async';

void main() {
  divide(1, 0).then((result) => print('1 / 0 = $result'))
    .catchError((error) => print('Error occured during division: $error'));
}

Future<double> divide(int a, b) {
  if (b == 0) {
    throw new Exception('Division by zero');
  }
  return new Future.value(a/b);
}
divide(1, 0).then((result) => print('1 / 0 = $result'),
    onError: (error) => print('Error occured during division: $error'));