在下面的代码中, $q promise的catch函数捕获了一个异常:
// 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;
}
但是,当我查看控制台日志输出时,我看到以下内容:
该异常在 Angular 中被捕获,但也被浏览器的错误处理捕获。这种行为确实会在 Q 库中重现。
它是一个错误吗?我如何才能真正用 $q 捕获异常?