2014-11-09 3 views
2

У меня вопрос об обработке ошибок в $ 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, чтобы гарантировать, что все ошибки могут быть обработаны.

ответ

0

Вам необходимо добавить явный оператор отклонения при ошибке, вызванной службой.

var deferred = $q.defer(); 
someService().then(function(obj){  
     deferred.resolve(obj): 
    }) 
.error(function(e){ 
    deferred.reject(e); 
    }); 

return deferred.promise; 
+0

Проблема в том, что служба, которую я вызываю глубже, не отвергает обещание, поэтому предложение об ошибке здесь не срабатывает. – user4131376

+0

Если служба, которую вы вызываете, не входит в вашу область действия и не отклоняется, если возникла ошибка, то это проблема, так как вызывающий должен ждать вечно. –

+0

Как работа, вы можете использовать тайм-аут с несколькими секундами, чтобы отклонить обещание. –

Смежные вопросы