我创建了一个工厂,涉及获取位置并从API获取数据并返回结果。当我从控制器调用工厂时,我得到Uncaught TypeError: Cannot read property 'then' of undefined
厂:
app.factory("getStations", function($http) {
var stations = function () {
console.log("stations function");
console.log("GetStations Factory Loaded");
navigator.geolocation.getCurrentPosition(function (position) {
var latLng = { 'lat': position.coords.latitude, 'lng': position.coords.longitude };
console.log("This is in location service: " + latLng["lat"] + "," + latLng["lng"]);
var url = "http://dev.url.com/location/" + latLng["lat"] + "/" + latLng["lng"] + "/5";
console.log(url);
return $http({ method: "GET", url: url }).then(function (result) {
return result.data.stations;
});
});
};
console.log("return");
console.log({ stations: stations });
return { stations: stations };
});
控制器:
app.controller("PullToRefresh", function($scope, getStations) {
//
console.log("Pull To Refresh Loaded");
$scope.items = [];
$scope.doRefresh = function() {
var promise = getStations.stations();
promise.then(function(result) {
$scope.items = result;
$scope.$broadcast("scroll.refreshComplete");
});
};
});
我是否遗漏了某些内容,如果我将$http
从navigator
中取出,则第二次有效。找到位置需要几秒钟,在第一次调用时,没有定义var
,我收到了网址错误。
答案 0 :(得分:0)
正如我的评论中所述,您未在Test
函数中返回任何内容,因此没有stations
方法可用。
看作then
并未返回可用的承诺,您需要使用navigator.geolocation.getCurrentPosition
$q