我正试图在Dart中真正获得Futures,我注意到我遇到的每个例子都使用handleException来处理完成Future的异常。然而,API文档声明“在大多数情况下,不需要调用handleException,因为如果将来的值被消耗,与此Future相关的异常将自然传播。如果需要执行一些特殊的本地异常处理,则只调用handleException这个特殊的未来的价值。“
那么我何时需要“特殊的本地异常处理”?有人可以更详细地解释一下吗?是否有一些代码,我真的不能通过让异常传播来轻松运行?
答案 0 :(得分:2)
Mads Ager给了我这个答案:
基本上,这相当于在直线代码中使用try-catch:
int doSomethingElse() {
try {
return thisMightFail();
} catch(e) {
return -1;
}
}
void doSomething() {
int value = doSomethingElse();
// operate on value
}
使用Futures就是这样(未经测试):
Future<int> doSomethingElse() {
return thisMightFail().transformException((e) => -1);
}
void doSomething() {
doSomethingElse().then((value) {
// operate on value
});
}
因此,这是针对本地异常处理而不是全局异常处理。如果你从不使用handleException或transformException,它们总是在非异步代码中处理顶级异常。