In the following code, an exception is caught by the catch function of the $q promise:
// 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;
}
However when I look in the console log output I see the following:
The exception was caught in Angular, but was also caught by the error handling of the browser. This behavior does reproduce with Q library.
Is it a bug? How can I truly catch an exception with $q?