Angular - http.get返回undefined

时间:2013-11-30 23:09:30

标签: angularjs

我创建了一个工厂来检索客户:

customerModule.factory("CustomerFactory", ["$http", "DataService", function ($http, dataService) {

    var self = this;
    self.page = 1;
    self.query = "";

    var queryFn = function (query) {
        self.query = query;
        $http.get(dataService.baseURI + "/customers", {
            params: {
                query: self.query,
                page: self.page,
                pageSize: 50
            }
        }).success(function (data) {
            return data.result;
        });
    };

    return {
        query: queryFn
    };
}]);

但是当我在我的控制器中使用它时,它返回undefined,我不确定我在这里做错了什么?

$scope.$watch("query", function () {
    if ($scope.query && $scope.query.length > 3) {
        console.log(customerFactory.query($scope.query));
    }
    else if ($scope.query.length < 4) {
        $scope.customers = [];
    }
});

1 个答案:

答案 0 :(得分:1)

如果你仔细查看queryFn功能,你会注意到你实际上并没有返回任何内容。这意味着queryFn将返回undefined

修复代码的第一步是将return放在$http前面。

第二步是确定调用customerFactory.query函数的方式。您希望它立即返回值,但$ http实际上会创建一个XHR请求,默认情况下XHR请求是异步的,因此您不能指望customerFactory.query立即返回结果。

如果您还没有学会承诺,那么现在是时候看看它们了,因为它们在角落世界中被广泛使用。

假设您已将return放在$ http之前,对customerFactory.query的调用实际上将返回一个promise对象。该promise对象具有.then方法。此方法应用作:

customerFactory.query($scope.query)
  .then(function(customers){
    console.log(customers);
  });