我想了解,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错误
以后可以处理嵌套错误吗?我知道,我可以在这里使用完成者类,也许这将是解决方案?
答案 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