簡體   English   中英

Angularjs HTTP方法中的異常處理

[英]Exception Handling In Angularjs HTTP Methods

我是angularjs的新手。 我正在使用angularjs 1.4版本。 我試圖處理從Spring控制器方法拋出的異常。 但我無法在下面的js中捕獲異常。

可能這是重復的問題,但我已經搜索了SO中的解決方案。 但沒有奏效。 請給我這個建議。 提前致謝。

在Spring MVC控制器方法中拋出異常也是正確的嗎? 或者如何對前端說500錯誤?

在角度控制器中:

Service.calculate (obj).then(function(response){
    // logic
});

在Angular服務中:

this.calculate = function(obj){
     try {
         return $http.post(PATH+'txn/calc',obj).then(function(resp){
                 return resp;
         }); 
     } catch (e) {
         alert(e);
     }
 }; 

彈簧控制器方法:

@RequestMapping(value = "/txn/calc", method = RequestMethod.POST)
public @ResponseBody someBean calculate(@RequestBody SomeBean someBean , HttpServletRequest request) {
    try {
        // exception occurs here
    } catch (Exception e) {
        throw e;
    }
}

嘗試這個:

$http.post(url).then(function(response) {
    console.log('post',response)
},
function(data) {
    // Handle error here
})

你應該添加一個函數作為then函數的第二個參數,如下所示:

$http.post(url).then(
function(response) {
  console.log(response);
},
function(data) {
  // Handle error here
  console.log(data);
})

您不必在javascript函數中使用Try Catch。 你需要使用你的諾言中的catch函數。

this.calculate = function(obj){
         return $http.post(PATH+'txn/calc',obj).then(function(resp){
             return resp;
          }).catch(function(error){ alert(error) }; 

 }; 

最好的實踐是使用服務或工廠來回報承諾。 然后在服務中應用then和catch功能。

app.factory('myService',myService);
myService.$inject('$http');
function myService($http){ 
     var services = { 
         calculate:calculate 
     } 
     return services; 

     function calculate(obj){ 
         return $http.post(PATH+'txn/calc',obj) 
     } 
}

將服務或工廠注入控制器並從中調用功能后。

app.controller('myCtrl',myCtrl);
myCtrl.$inject = ['$scope','myService'];
function myCtrl($scope,myService){
    var vm = this;
    vm.calculate = function(obj){
        myService.then(success).catch(error);

        function success(response){...}
        function error(response){...}
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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