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) {
    fur1.then((value1) {
      print(value1);
    });
    print(value);
  }).catchError((err) => print(err));
}

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

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

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

4

1 回答 1

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
于 2014-06-17T07:35:22.547 回答