Dart Future从源Future向外抛出异常句柄

Dart Future从源Future向外抛出异常句柄,dart,dart-async,Dart,Dart Async,我试图理解dart未来异常是如何工作的。我读了一篇很好的文章。但是当我有嵌套的future并且第一个future抛出错误时,我如何处理第二个future的错误呢 为了澄清我的意思,请看下面的示例 导入'dart:async'; void main(){ var fur1=新未来(()=>45); fur1.然后((值){ 抛出新的StateError('Hello error'); }); var fur2=新未来(()=>24); fur2.然后((值){ fur1.然后((值1){ 印刷品(

我试图理解dart未来异常是如何工作的。我读了一篇很好的文章。但是当我有嵌套的future并且第一个future抛出错误时,我如何处理第二个future的错误呢

为了澄清我的意思,请看下面的示例

导入'dart:async';
void main(){
var fur1=新未来(()=>45);
fur1.然后((值){
抛出新的StateError('Hello error');
});
var fur2=新未来(()=>24);
fur2.然后((值){
fur1.然后((值1){
印刷品(价值1);
});
印刷品(价值);
}).catchError((err)=>打印(err));
}
在fur1中,我抛出了一个异常,并期望在fur2中捕获错误,但编译器显示消息

未处理的异常:错误状态:Hello错误


将来是否可以处理嵌套错误?我知道,我可以在这里使用completer类,也许它就是解决方案?

我不确定您实际想要实现什么

但对我来说是这样的

导入'dart:async';
void main(){
var fur1=新未来(()=>45);
//fur1.然后((值){
//抛出新的StateError('Hello error');
//  });
var fur2=新未来(()=>24);
fur2.然后((值){
var x=fur1。然后((值1){
印刷品(价值1);
抛出新的StateError('Hello error');//45);
fur1.然后((值){
抛出新的StateError('Hello1 error');
}).catchError((err)=>print('catchError1:${err}');
var fur2=新未来(()=>24);
fur2.然后((值){
var x=fur1。然后((值1){
印刷品(价值1);

抛出新StateError('Hello2 error');//这正是我试图完成的!Thx太多了。原始程序失败的原因是,
fur1
上的侦听器在完成后添加了一个错误。这意味着该错误被认为是未经处理的,并成为顶级未捕获错误。
fur1
上的侦听器被添加到
中,然后
另一个未来的处理程序,它将在未来的某个时间点触发,这恰好是在
fur1
未来完成之后。