AngularJS - Verspricht rethrow gefangen Ausnahmen

In dem folgenden code, der eine Ausnahme abgefangen wird, indem der fangen Funktion der $q-Versprechen:

//Fiddle - http://jsfiddle.net/EFpn8/6/
f1().then(function(data) {
        console.log("success 1: "+data)
        return f2();
    })
    .then(function(data) {console.log("success 2: "+data)})
    .catch(function(data) {console.log("error: "+data)});

function f1() {
    var deferred = $q.defer();
    //An exception thrown here is not caught in catch
    //throw "err";
    deferred.resolve("done f1");        
    return deferred.promise;
}

function f2() {
    var deferred = $q.defer();
    //An exception thrown here is handled properly
    throw "err";
    deferred.resolve("done f2");        
    return deferred.promise;
}  

Aber wenn ich mir in der Konsole die log-Ausgabe sehe ich Folgendes:

AngularJS - Verspricht rethrow gefangen Ausnahmen

Ausnahme gefangen wurde, in Winkel, war aber auch gefangen von der Fehlerbehandlung der browser. Dieses Verhalten reproduziert mit Q-Bibliothek.

Ist es ein bug? Wie kann ich wirklich abfangen einer Ausnahme mit $q?

InformationsquelleAutor VitalyB | 2014-04-27

Schreibe einen Kommentar