javascript - 如何处理 AngularJS 中的工厂服务错误

标签 javascript angularjs

工厂代码

app.factory('abcFactory', function ($http, Config, $log) {
    var serviceURL = Config.baseURL + '/results';
    return{
        results:function() {
            var promise = $http({
                method: 'GET',
                url: serviceURL,
                timeout: Config.httpTimeout
            }).then(function(response) {
                    return response;  

                },  function(reason) {
                    $log.error("Request Failed: ", reason)
                });

            return promise;
        }
    }
});

Controller 代码

app.controller('abcController',function ($scope, $log,abcFactory, Config)
{

        abcFactory.results(function(data){
            $scope.results =data;
        },function(response)
        {
          console.log("response"+response);

          if(response.status === 0)
          {
              console.log("gotcha");
               $scope.serviceTimedoutError(response.data, response.status, response.config);
          } else
          {
                console.log("gotcha");
                $scope.serviceFailure(response.data, response.status, response.config);
          }


        });
});

$scope.results 在服务返回良好响应时正常填充。

而且,当出现错误时,我可以在控制台上看到来自工厂代码日志的错误消息,内容为 “Request Failed: blah blah”

我的问题: 当出现错误时,为什么我在 Controller 中看不到错误消息,它甚至没有在浏览器控制台中打印 "gotcha"。我需要 Controller 中的错误详细信息,以便我可以在 View 中显示它。我不想在工厂中传递 $scope

我在 Controller 代码中做错了什么?

如果我没记错的话,我正在做一些符合 AngularJS Failed Resource GET 的事情 但没有得到想要的结果。

最佳答案

看起来您希望 results 函数接受回调,但它的参数列表目前是空的。不过,您正在返回 promise 。

因此要么将 Controller 中的调用更改为:

abcFactory.results()
  .success(function() { ... })
  .error(function() { ... })

或者改变结果函数本身:

results: function(successCallback, errorCallback) {
  var promise = $http(...).success(successCallback).error(errorCallback);
  return promise;
}

关于javascript - 如何处理 AngularJS 中的工厂服务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973295/

相关文章:

javascript - 从多行文本 HTML 编辑器 Sharepoint 2010 中的自定义列表获取行数据

javascript - Bender.js: "bender server run"命令在目录中打开 bender.js 配置文件而不是启动 bender.js 服务器

Javascript、Jquery - 添加 url 图像

javascript - jQuery 加载 <script> 但在 AngularJS 下不评估相同内容

javascript - AngularJS Controller As : updating controller field in $interval does not update ng-show

javascript - Fullcalendar 3 - 当前日期边框颜色

javascript - 用于替换字符串的正则表达式

javascript - AngularJS:Ngtable 重新加载到旧数据

angularjs - 解析 Promise 数组

javascript - 扩展/合并对象