簡體   English   中英

帶有承諾的承諾中的錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM