【发布时间】:2014-11-09 17:24:23
【问题描述】:
我有一个关于 $q 承诺中的错误处理的问题。下面的代码不适用于处理通过受控拒绝或通过 $q 解决的承诺之外的错误。这意味着,如果错误在代码中的任何地方抛出并且未被拒绝,则 catch 块将不会触发。有没有另一种方法可以让 catch 能够捕捉到任何错误?我知道调用可以放在 try catch 中,但我想知道是否有办法使 $q catch 的行为类似于常规的 javascript catch。
angular.module('myTest',[]).controller('myController',function($q){
function someService(){
var deferred = $q.defer();
throw 'error';
deferred.resolve({});
return deferred.promise;
}
someService().then(function(obj){
console.log('then');
}).catch(function(e){
console.log(e);
});
});
我唯一的希望是处理所有错误来做这样的事情吗:
try
{
someService().then(function(obj){
console.log('then');
});
}
catch(e){
console.log('an error happened ' + e);
}
她的用例是我在 someService() 中调用另一个服务,这引发了一个我无法控制的错误,我无法确保该承诺被拒绝。
为什么 $q 承诺没有在内部封装在 javascript try catch 中以保证所有错误都可以被处理。
【问题讨论】:
标签: javascript angularjs angular-promise