未来抛出异常处理来自原始未来

时间:2014-06-17 07:21:07

标签: dart dart-async

我想了解,dart未来的例外是如何运作的。我读了一篇关于它的非常好的文章link。但是当我嵌套未来并且他们中的第一个抛出错误时,我怎么能在第二个未来处理这个错误。

澄清,我的意思是看下面的样本。

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中的错误,但编译器显示消息

  

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

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

1 个答案:

答案 0 :(得分:2)

我不确定你究竟想要完成什么。

但对我而言,这样做

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