飞镖捕捉条款

我最近偶然发现了以下 Dart 代码:

void doSomething(String url, String method) {
HttpRequest request = new HttpRequest();


request.open(method, url);
request.onLoad.listen((event) {
if(request.status < 400) {
try {
String json = request.responseText;
} catch(e) {
print("Error!");
}
} else {
print("Error! (400+)");
}
});


request.setRequestHeader("Accept", ApplicationJSON);
}

我想知道 catch 子句中的 e变量是什么:

catch(e) {
...
}

显然这是某种异常 ,但是(1)为什么我们不需要指定它的类型,(2)我可以添加什么来指定它的具体类型?例如,我如何以类似于 catchError(someHandler, test: (e) => e is SomeException)的方式处理多种可能的异常?

43796 次浏览
  1. Dart 是一种可选的类型语言,所以不需要 e类型。

  2. 只能使用以下语法捕获 SomeException:

try {
// ...
} on SomeException catch(e) {
//Handle exception of type SomeException
} catch(e) {
//Handle all other exceptions
}

飞镖: 起飞和运行 的 catch部分

最后,catch可以接受2个参数(catch(e, s)) ,其中第二个参数是 StackTrace