web-dev-qa-db-fra.com

Clause de capture de fléchettes

Je suis récemment tombé sur le code Dart suivant:

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);
}

Je me demande quelle est la variable e dans la clause catch:

catch(e) {
    ...
}

Évidemment, c'est une sorte d'exception , mais (1) pourquoi n'avons-nous pas besoin de spécifier son type, et (2) que pourrais-je ajouter pour spécifier son type concret? Par exemple, comment pourrais-je gérer plusieurs types d'exceptions possibles de la même manière que catchError(someHandler, test: (e) => e is SomeException)?

35
IAmYourFaja

1) Dart est une langue typée facultative. Le type de e n'est donc pas requis.

2) vous devez utiliser la syntaxe suivante pour capturer uniquement SomeException:

try {
  // ...
} on SomeException catch(e) {}

Voir la section catch de Dart: en cours d'exécution .

Enfin, catch peut accepter 2 paramètres (catch(e, s)) où le deuxième paramètre est le StackTrace .

51
Alexandre Ardhuin