Javascript Http get请求的完成时间晚于作用域在JS中获取值的时间

Javascript Http get请求的完成时间晚于作用域在JS中获取值的时间,javascript,angularjs,Javascript,Angularjs,我一直在从事Angular JS项目 在这种情况下,我需要调用get方法来获取一些记录,然后我需要将响应分配给scope变量并将其显示给用户 但我的问题是HTTP get请求完成得很晚。所以我的作用域的值是未定义的 下面是我的代码控制器代码: var app = angular.module('falconeApp',[]); app.controller("logicCtrl",['$scope','getDestinationService', function($scope, getDe

我一直在从事Angular JS项目

在这种情况下,我需要调用get方法来获取一些记录,然后我需要将响应分配给scope变量并将其显示给用户

但我的问题是HTTP get请求完成得很晚。所以我的作用域的值是未定义的

下面是我的代码控制器代码:

var app = angular.module('falconeApp',[]);

app.controller("logicCtrl",['$scope','getDestinationService', function($scope, getDestinationService){      
    $scope.destinations = getDestinationService.getDestinations();
}]);

app.factory("getDestinationService",function($http, $q){
    var getDestinationApi = "https://findfalcone.herokuapp.com/planets";
    return {
        getDestinations: function(){
            $http.get(getDestinationApi)
            .then(function(response) {
            return response.data;
        });
        }
    }
});
因此,正如您在上面的例子中所看到的,$scope.destinations是未定义的,因为HTTP请求完成的时间晚于为其赋值的时间


有人能帮我吗?

修改你的呼叫功能如下:

getDestinationService.getDestinations().then(response_data=>{
    $scope.destinations = response_data;
}).catch(error=>{
    console.log(error);
});

$http.get是一个承诺,因此您可以始终在中捕获响应。然后,这将解决您的问题。

您还需要在控制器端添加一个承诺回调

then方法返回一个承诺。承诺对象用于 延迟和异步计算。承诺代表承诺 操作尚未完成,但预计将在未来完成


@伊扎卡雷托斯号
app.controller("logicCtrl", ['$scope', 'getDestinationService', function($scope, getDestinationService) {

  $scope.getDestinations = function() {
    getDestinationService.getDestinations().then(function(res) {
      $scope.destinations = res;
    });
  };

  $scope.getDestinations();

}]);