3

工厂代码

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工厂。

我在控制器代码中做错了什么?

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

4

2 回答 2

4

看起来您希望该results函数接受回调,但它的参数列表当前为空。不过,您正在返回承诺。

因此,要么将控制器中的调用更改为:

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

或者改变结果函数本身:

results: function(successCallback, errorCallback) {
  var promise = $http(...).success(successCallback).error(errorCallback);
  return promise;
}
于 2013-06-06T22:37:11.807 回答
1

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

于 2016-08-18T03:47:03.780 回答