dart - Future 从原点 future 外部抛出异常句柄

标签 dart dart-async

我试图了解 dart future 异常是如何工作的。我读了一篇关于它的很好的文章link 。但是,当我嵌套了 future 并且第一个 future 抛出错误时,我该如何在第二个 future 上处理这个错误。

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

import 'dart:async';

void main() {

  var fur1 = new Future<int>(() => 45);
  fur1.then((value) {
    throw new StateError('Hello error');
  });

  var fur2 = new Future<int>(() => 24);
  fur2.then((value) {
    fur1.then((value1) {
      print(value1);
    });
    print(value);
  }).catchError((err) => print(err));
}

在fur1中,我抛出异常并期望在fur2中捕获错误,但编译器显示消息

Unhandled exception: Bad state: Hello error

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

最佳答案

我不确定您实际上想要实现什么目标。

但对我来说,它是这样工作的

import 'dart:async';

void main() {

  var fur1 = new Future<int>(() => 45);
//  fur1.then((value) {
//    throw new StateError('Hello error');
//  });

  var fur2 = new Future<int>(() => 24);
  fur2.then((value) {
    var x = fur1.then((value1) {
      print(value1);
        throw new StateError('Hello error'); // <= inner exception
      });
      print(value);
      return x; // <= return future
    }).catchError((err) => print('catchError: ${err}'));
  }

或者这样

import 'dart:async';

void main() {

  var fur1 = new Future<int>(() => 45);
  fur1.then((value) {
    throw new StateError('Hello1 error');
  }).catchError((err) => print('catchError1: ${err}'));

  var fur2 = new Future<int>(() => 24);
  fur2.then((value) {
    var x = fur1.then((value1) {
      print(value1);
      throw new StateError('Hello2 error'); // <= inner exception
    });
    print(value);
    return x; // <= return future
  }).catchError((err) => print('catchError2: ${err}'));
}
catchError1: Bad state: Hello1 error
24
45
catchError2: Bad state: Hello2 error

关于dart - Future 从原点 future 外部抛出异常句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257905/

相关文章:

Dart 限制同时连接

asynchronous - 如何等待不返回 Future 的方法?

flutter - 如何更改 flutter 动画包OpenContainer()小部件的更改持续时间

dart - Flutter中的共享首选项无法保存和读取列表

dart - 在Dart网络应用程序中,比新的DateTime更精确的是什么?

flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?

dart - 节点与子节点之间的区别

DART:如何编写返回 Future 的耗时函数

dart - 异步代码的 UnitTest 示例

dart - 检索 Dart 中的多个商店