Javascript 配置解析中的角度链延迟不工作

Javascript 配置解析中的角度链延迟不工作,javascript,angularjs,promise,deferred,Javascript,Angularjs,Promise,Deferred,一天中的大部分时间,我都在为此头疼,无法将$scope.weatherData解析为除未定义之外的任何内容:( 这是我的view1控制器: 'use strict'; angular.module('myApp.view1', ['ngRoute']) .config(['$routeProvider', function ($routeProvider) { $routeProvider.when('/view1', { templateUr

一天中的大部分时间,我都在为此头疼,无法将$scope.weatherData解析为除未定义之外的任何内容:(

这是我的view1控制器:

'use strict';

angular.module('myApp.view1', ['ngRoute'])

    .config(['$routeProvider', function ($routeProvider) {
        $routeProvider.when('/view1', {
            templateUrl: 'view1/view1.html',
            controller: 'View1Ctrl',
            resolve: {
                weatherData: ['$q', 'weatherSvc', function ($q, weatherSvc, options) {
                    var lat = 0;
                    var lon = 0;
                    var deferred = $q.defer();

                    navigator.geolocation.getCurrentPosition(
                        deferred.resolve,
                        deferred.reject,
                        options);

                    deferred.promise.then(function (position) {
                        lat = position.coords.latitude;
                        lon = position.coords.longitude;
                        console.log('lat:' + lat + ' lon:' + lon);
                        var data = weatherSvc.query(lat, lon);
                        console.log(data); // <-- data is a promise at this point but log has already fired in the controller
                        data.then(function(data){
                            console.log(data.data);
                            return data;
                        });
                    });
                }]
            }
        });
    }])

    .controller('View1Ctrl', ['$scope', 'weatherData', function ($scope, weatherData) {
        $scope.weatherData = weatherData;
        console.log(weatherData);
    }]);
“严格使用”;
angular.module('myApp.view1',['ngRoute']))
.config(['$routeProvider',函数($routeProvider){
$routeProvider.when(“/view1”{
templateUrl:'view1/view1.html',
控制器:“View1Ctrl”,
决心:{
weatherData:['$q','weatherSvc',函数($q,weatherSvc,选项){
var-lat=0;
var-lon=0;
var deferred=$q.deferred();
navigator.geolocation.getCurrentPosition(
下决心,
拒绝,
选择权);
延期。承诺。然后(职能(职位){
纬度=位置坐标纬度;
lon=位置坐标经度;
log('lat:'+lat+'lon:'+lon);
var数据=weatherSvc.query(纬度、经度);
console.log(数据);//=min)?值:min;

value=(您需要的值
返回延迟。promise.then(…
weatherData
解析函数和
返回数据中)。然后(…<代码> >里面,什么是<代码>选项< /代码>?谢谢!编辑:选项来自一个示例,可能会被删除,因为我不认为我需要传递任何东西。@ Phil请考虑把它作为答案并解释为什么。“BenjaminGruenbaum If Phil不会很快回答它,我会抛出一个答案。这主要是个例子。f被尝试并迷失在末日的三角中。一旦菲尔指出我需要做什么,我意识到我做了什么以及为什么它不起作用。你需要
延迟返回。承诺。然后(…
在你的
天气数据中
解析函数和
返回数据。然后(…<代码> >里面,什么是<代码>选项< /代码>?谢谢!编辑:选项来自一个示例,可能会被删除,因为我不认为我需要传递任何东西。@ Phil请考虑把它作为答案并解释为什么。“BenjaminGruenbaum If Phil不会很快回答它,我会抛出一个答案。这主要是个例子。当菲尔指出我需要做什么时,我意识到我做了什么,为什么它不起作用。
angular.module('myApp.services', [])
.factory('weatherSvc', ['$http', function ($http) {
    'use strict';
    function rangeLimit(value, min, max) {
        value = (value >= min) ? value : min;
        value = (value <= max) ? value : max;
        return value;
    }

    var sdo = {
        query: function (lat, lon, refresh) {
            // validations
            refresh = refresh || false;
            // valid lat = -90...90
            // valid lon = -180...180
            lat = rangeLimit(lat, -90, 90);
            lon = rangeLimit(lon, -180, 180);

            var promise = $http({
                method: 'GET',
                url: 'http://api.openweathermap.org/data/2.5/forecast/daily?lat=' + lat + '&lon=' + lon + '&mode=json'
            });
            promise.success(function (data, status, headers, conf) {
                return data;
            });
            return promise;
        }
    };
    return sdo;
}]);