我正在为http通信创建一个服务,我需要一些方法来返回一个值。
但是当我调用success时,我得到一个类型错误;(…
“typeerror:无法读取未定义的属性'success'”

angular.module('myApp').controller('mainCtrl', function($scope, apiService){
  $scope.GetJson = function() {
    apiService('post','http://myApiAddress', "{'dataFn': 'userInfo'}")
    .success(function(response) { // ERROR !!! TypeError: Cannot read property 'success' of undefined
      $scope.userinfo = response;
    })
    .error(function(error){
      console.log(error);
    })
  }

})

---------------------------------------------------------------------------

var module = angular.module('httpService',[]);
module.factory('apiService',['$http',function($http){

 var userAuthority = true; // or false (boolean Value)

 var apiService = function (method, url, param){
    if(userAuthority){
      apiService.idCheck().success( function(res) {
        return $http[method](url, param);
      })
      .error( function(err) {
          console.log(err);
      })
    }
    else {
      return $http[method](url, param);
    }
  };
  apiService.idCheck = function () {
    return $http.get('http://myApiAddress');
  };
}])

我在寻找两个答案之一:
为什么成功回调返回错误?
我怎样才能纠正这个错误?

最佳答案

创建factory时,需要返回Object。您的工厂返回apiService
添加此行undefined
更新
为什么会出错?
出现此错误是因为当您调用return apiService时,它将调用另一个异步函数apiService。同时,在函数idCheck中,这里:

return $http[method](url, param);

不会返回到apiService。而是返回到匿名函数:
function(res) {
    return $http[method](url, param);
})

因此,apiService的返回值是apiService
如何修复?
手动创建延迟/承诺对象:
module.factory('apiService',['$http', '$q', function($http, $q) {
...
var apiService = function (method, url, param){
    var deferred = $q.defer();
    if(userAuthority){
        apiService.idCheck().success(function(res) {
            $http[method](url, param).success(function(res) {
                deferred.resolve(res);
            }).error(function(err) {
                deferred.reject(err);
            });
        }).error( function(err) {
            deferred.reject(err);
        });
        return deferred.promise;
    } else {
        return $http[method](url, param);
    }
};
...

供参考:undefined$http

10-05 20:37