我试图了解 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/