2
import 'dart:async';
void main() {
divide(1, 0).then((result) => print('1/0 = $result'))
.catchError((error) => print('Error occured during division: $error'));
}
Future<double> divide(int a, b) {
if (b == 0) {
throw new Exception('Division by zero');
}
return new Future.value(a/b);
}
目前我正在學習如何使用Dart中的期貨,並且我陷入了這樣一個簡單的例子。當用戶嘗試執行零除法時,我的將來會拋出異常。但是,.catchError不處理我的異常。取而代之,我用堆棧跟蹤得到了未處理的異常。我很確定我錯過了一些明顯的東西,但不明白究竟是什麼。未來的執行會導致未處理的異常
據我所知,還有另一種方式來處理錯誤:
divide(1, 0).then((result) => print('1/0 = $result'),
onError: (error) => print('Error occured during division: $error'));
使用命名可選的參數 - onerror的。這樣做仍會導致未處理的異常。
我想澄清一件事。我對嗎? - 這兩種方法之間的唯一區別是.catchError()還可以處理內部期貨(外部未來的then()方法內部調用的期貨)引發的錯誤,而onError只捕獲外部未來引發的錯誤?
德米特里
謝謝。
謝謝你的回答。我是否正確理解,等待/異步是在1.9版本(最新版本)中引入的,它是期貨的替代品嗎?無論如何,我想了解我的例子有什麼問題。 – 2015-03-31 21:23:19
我錯過了一些東西,並更新了我的答案。異步/等待不是期貨,它只是讓你更容易地使用未來。請參閱https://www.dartlang.org/articles/await-async/或http://stackoverflow.com/questions/27212220 – 2015-03-31 21:26:30
哦,對!現在我懂了。還有一個簡短的問題。如果我在你的例子中使用了修改後的除法函數,我可以返回** a/b **而不是** new Future.value(a/b)**嗎?也感謝您提供的鏈接。 – 2015-03-31 21:33:11