У меня вопрос об обработке ошибок в $ q обещаниях. Код ниже не работает для обработки ошибок за пределами обещаний, которые управляются посредством управляемого отклонения или разрешения через $ q. Значение, если ошибка выбрасывается в любом месте кода и не отклоняется, блок catch не будет срабатывать. Есть ли другой способ уловить возможность поймать любую ошибку? Я знаю, что вызов может быть помещен в попытку catch, но мне было интересно, есть ли способ заставить catch $ q вести себя как обычный 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
, чтобы гарантировать, что все ошибки могут быть обработаны.
Проблема в том, что служба, которую я вызываю глубже, не отвергает обещание, поэтому предложение об ошибке здесь не срабатывает. – user4131376
Если служба, которую вы вызываете, не входит в вашу область действия и не отклоняется, если возникла ошибка, то это проблема, так как вызывающий должен ждать вечно. –
Как работа, вы можете использовать тайм-аут с несколькими секундами, чтобы отклонить обещание. –