未捕获的TypeError:无法读取属性'然后'未定义的

时间:2015-10-07 01:39:47

标签: angularjs

我创建了一个工厂,涉及获取位置并从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");
        });
    };
});

我是否遗漏了某些内容,如果我将$httpnavigator中取出,则第二次有效。找到位置需要几秒钟,在第一次调用时,没有定义var,我收到了网址错误。

1 个答案:

答案 0 :(得分:0)

正如我的评论中所述,您未在Test函数中返回任何内容,因此没有stations方法可用。

看作then并未返回可用的承诺,您需要使用navigator.geolocation.getCurrentPosition

$q