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

时间:2013-06-06 22:29:14

标签: 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;
        }
    }
});

控制器代码

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 "

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

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

如果我没有错,我正按照AngularJS Failed Resource GET的方式做一些事情。 但没有得到理想的结果。

2 个答案:

答案 0 :(得分:4)

看起来您希望results函数进行回调,但其参数列表当前为空。你回来了promis。

因此要么将控制器中的呼叫更改为:

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

或者更改结果函数本身:

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

答案 1 :(得分:1)

弃用通知 $ http遗留承诺方法成功和错误已被弃用。请改用标准方法。如果$ httpProvider.useLegacyPromiseExtensions设置为false,则这些方法将抛出$ http / legacy错误。