【问题标题】:Exception Handling In Angularjs HTTP MethodsAngularjs HTTP 方法中的异常处理
【发布时间】:2017-06-09 08:39:49
【问题描述】:

我是 angularjs 的新手。我正在使用 angularjs 1.4 版本。我正在尝试处理从 Spring 控制器方法抛出的异常。 但我无法在下面的 js 中捕捉到异常。

可能这是重复的问题,但我已经在 SO 中搜索了解决方案。但没有奏效。请给我这个建议。提前致谢。

在 Spring MVC 控制器方法中也抛出异常是否正确?或者如何向前端说 500 错误?

在 Angular 控制器中:

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;
    }
}

【问题讨论】:

标签: javascript java angularjs spring-mvc


【解决方案1】:

试试这个:

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

【讨论】:

  • 谢谢。但它不是功能(数据)块,而是功能(响应)块。但它是在 spring 控制器 catch 块中出现的。
【解决方案2】:

你应该像这样添加一个函数作为 then 函数的第二个参数:

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

【讨论】:

  • 谢谢。但它不会进入功能(数据)块。但它是在 spring 控制器 catch 块中出现的。
【解决方案3】:

您不必在 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){...}
     }
}

【讨论】:

  • nevradub 谢谢,但它说在角度控制器中捕获无效标识符
  • 那么尝试在你的函数中使用两个回调。 (.then(successCallback, errorCallback))
  • nevradub。你的意思是应该有2个参数。
  • 是的,在经典方法中,第一个参数是成功回调,第二个参数是错误回调。如果需要,请查看官方文档以获得更精确的信息。 docs.angularjs.org/api/ng/service/$http
  • 好的,谢谢 nevradub。当我使用两个回调函数时,它的第一个块我的意思是成功块而不是错误块。你知道为什么吗?
猜你喜欢
  • 2014-04-02
  • 1970-01-01
  • 2015-05-21
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多