[英]Error handling in promises with catch
我對$ q promise中的錯誤處理有疑問。 下面的代碼不適用於處理超出通過控制拒絕或通過$ 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 promises不會被內部包裝在javascript try catch
以確保所有錯誤都可以得到處理,這是有原因的。
服務拋出錯誤時,您需要添加一個顯式拒絕語句。
var deferred = $q.defer();
someService().then(function(obj){
deferred.resolve(obj):
})
.error(function(e){
deferred.reject(e);
});
return deferred.promise;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.