javascript - 如何使用 Angularjs Promise 正确获取变量

标签 javascript angularjs angular-promise

我无法解决这个问题。我的问题是为什么我无法解决回复。我无法使用 Controller 中的响应。但我收到 6 个回复为空。请打开控制台并按谷歌地图下方的“获取结果”按钮。您将看到未定义的数组。

这里是plunker

 getGoogleDirection.getData(response,$scope.mymap).then(function(res){
                console.log(res); // **it returns undefined elements**
            });

这里是服务。

    App.factory('setData',function($q){
    return {
        getData:function(array){
            var deferred = $q.defer();
            var newArray = [];
            angular.forEach(array,function(firstBlocks,key){
                var dummy = firstBlocks.chunk(9);
                angular.forEach(dummy,function(last,key2){
                    if(key2!=0){
                        dummy[key2].unshift(dummy[key2-1][dummy[key2-1].length-1]);
                    }
                });
                newArray.push(dummy);
            });
            deferred.resolve(newArray);
            return deferred.promise;
        }
    };
}); 
App.factory('getGoogleDirection',function($q){
    return {
        getData:function(array,mymap){
            var distances = [];
            var promises = []
            angular.forEach(array,function(object,key){
                angular.forEach(object,function(array2,key2){
                    promises.push(getDirection(array2));
                });
            });
            function getDirection(array){
                var wayPoints = [];
                var start = array[0];
                var finish = array[array.length-1];
                array.pop();
                array.shift();
                angular.forEach(array,function(item,key){
                    wayPoints.push({
                        location:new google.maps.LatLng(parseFloat(item.lat),parseFloat(item.lng)),
                        stopover:true
                    });
                });
                calcRoute(new google.maps.LatLng(parseFloat(start.lat),parseFloat(start.lng)), wayPoints, new google.maps.LatLng(parseFloat(finish.lat),parseFloat(finish.lng)));
            }
            function calcRoute(start,waypoints,end) {
                var directionsDisplay;
                var directionsService = new google.maps.DirectionsService();
                directionsDisplay = new google.maps.DirectionsRenderer();
                directionsDisplay.setMap(mymap);
                    var request = {
                        origin:start,
                        destination:end,
                        waypoints:waypoints,
                        optimizeWaypoints: false,
                        travelMode: google.maps.TravelMode.DRIVING,
                        avoidHighways:false,
                        avoidTolls:false
                    };
                var deferred = $q.defer();
                return directionsService.route(request, function(response, status) {
                    if (status == google.maps.DirectionsStatus.OK) {
                        directionsDisplay.setDirections(response);
                        deferred.resolve(response);
                    }else{
                        deferred.reject(response);
                        alert('Error');
                    }
                    return deferred.promise;
                });
            }
            return $q.all(promises).then(function(res){
                return res;
            });
        }
    }
});

最佳答案

当 promise 得到解决时,它会在回调函数中提供已解决的数据。在您的代码中您没有使用它。

修改这段代码

              var dist = [];
              angular.forEach(data, function (d) {
                if (d) dist.push(d);
              });
              console.log(dist);
              return dist;

看这里 http://plnkr.co/edit/dmlhpWKUxL7CLb1ej8FV?p=preview

关于javascript - 如何使用 Angularjs Promise 正确获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717426/

相关文章:

javascript - 将属性集中在我的 iframe 网站端口上

javascript - 从 Javascript 检测损坏的锁图标(混合安全/不安全内容)

javascript - 火车图表项目删除错误

javascript - AngularJS 组件模式在 Promise 后不更新

javascript - 如何从 AngularJS 中的服务调用 ajax?

javascript - 你如何在 AngularJS View (ng-show) 中使用 promise ?

javascript - 如何触发 "iron-localstorage-load"事件?

javascript - 将 $scope 传递给 Angularjs 中的服务

javascript - 使用 AngularJS 重置变量和编辑数组

javascript - AngularJS:ng-class 不适用于 bool 函数