Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular-http.get返回未定义_Angularjs - Fatal编程技术网

Angularjs Angular-http.get返回未定义

Angularjs Angular-http.get返回未定义,angularjs,Angularjs,我创建了一个工厂来检索客户: customerModule.factory("CustomerFactory", ["$http", "DataService", function ($http, dataService) { var self = this; self.page = 1; self.query = ""; var queryFn = function (query) { self.query = query;

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

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
    };
}]);
但当我在控制器中使用它时,它返回未定义的
,我不确定我在这里做错了什么

$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 = [];
    }
});
$scope.$watch(“查询”),函数(){
如果($scope.query&&$scope.query.length>3){
log(customerFactory.query($scope.query));
}
else if($scope.query.length<4){
$scope.customers=[];
}
});

如果仔细查看
queryFn
函数,您会发现实际上并没有从中返回任何内容。这意味着
queryFn
将返回
undefined

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

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

如果你还没有学会承诺,那么现在是时候来看看它们了,因为它们在世界各地都有使用

假设您将
return
放在$http前面,那么对
customerFactory.query
的调用实际上将返回一个promise对象。这个promise对象有一个
。然后
方法。此方法应用于:

customerFactory.query($scope.query)
.然后(功能(客户){
console.log(客户);
});

queryFn
不返回任何内容,“nothing”的JS关键字是
未定义的
。但我想
返回数据。结果会返回吗?至少,这是我想要的回报