web-dev-qa-db-ja.com

ダーツキャッチ条項

最近、次の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);
}
_

e変数がcatch句に何があるのだろうと思います:

_catch(e) {
    ...
}
_

明らかにそのある種の例外 ですが、(1)型を指定する必要がないのはなぜですか、(2)具体的な型を指定するためにそこに何を追加できますか?たとえば、catchError(someHandler, test: (e) => e is SomeException)と同様の方法で複数のタイプの可能な例外をどのように処理できますか?

35
IAmYourFaja

1)Dartはオプションの型付き言語です。したがって、eのタイプは必要ありません。

2)SomeExceptionのみをキャッチするには、次の構文を使用する必要があります。

_try {
  // ...
} on SomeException catch(e) {}
_

catchDart:Up and Running のセクションをご覧ください。

最後に、catchは2つのパラメーター(catch(e, s))を受け入れることができます。ここで、2番目のパラメーターは StackTrace です。

51