2013-12-14 104 views
0

我有一個指令,我正在注入一項服務,使$http調用到後端服務。

如何處理404/401/HTTP錯誤?我正在尋找最佳實踐模式。

$http是否吞噬並拒絕承諾,當它遇到HTTP錯誤?

這是我迄今爲止,它似乎工作確定,但我不知道我現在做的推薦方式:

服務

app.service('helpService', ['$http', function ($http) { 
    return { 
     getHelpUrl: function (pageUrl) { 
      return $http.post('Home/GetHelpUrl', { pageUrl: pageUrl }); 
     } 
    } 
}]); 

指令

app.directive('helpLink', ['$location', 'helpService', function ($location, helpService) { 
    return { 
     restrict: 'A', 
     replace: true, 
     scope: {}, 
     template: function (elem, attrs) { 
      return '<a ng-href="{{helpUrl}}" ng-show="showLink" target="_blank">Help?</a>'; 
     }, 
     link: function (scope, elem, attrs) { 
      scope.showLink = false; 

      helpService.getHelpUrl($location.path()).success(function (data) { 
       scope.helpUrl = data.helpUrl; 
       scope.showLink = true; 
      }); 
     } 
    } 
}]); 

回答

1

success方法也有定義一個error(function(data, status, headers, config)方法超過$ http。

這是從文檔例如

$http({method: 'GET', url: '/someUrl'}). 
    success(function(data, status, headers, config) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }). 
    error(function(data, status, headers, config) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 

您可以使用它使用它像捕捉錯誤的`.then`你說

1

如果您想捕獲所有錯誤,您可以查看攔截器。看看documentation。您也可以在您的.then方法中使用錯誤回調。 (這將取代你.success方法),因爲$http返回一個承諾(見$ Q promise api):

攔截器可以註冊類似:

app.config(function($httpProvider){ 
    $httpProvider.interceptors.push('connectionInterceptor'); 
}); 

app.factory('connectionInterceptor', function ($q) { 
    return { 
     'requestError':function(rejection){ 
      //do something general (global) 
      //send a rejection 
     }, 
     'responseError': function (response) { 
      //do something general (global) 
      //send a rejection 
     } 
    }; 
}); 
+0

這樣:'。然後(函數(successResult){ },function(errorResult){});'? – Sam

+0

是的,查看這個[link](http://docs.angularjs.org/api/ng.$http)('Returns'section''''''''''''),用於'successResult'和'errorResult'的對象結構 – calebboyd