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关键字是未定义的
。但我想返回数据。结果会返回吗?至少,这是我想要的回报