Javascript Http get请求的完成时间晚于作用域在JS中获取值的时间
我一直在从事Angular JS项目 在这种情况下,我需要调用get方法来获取一些记录,然后我需要将响应分配给scope变量并将其显示给用户 但我的问题是HTTP get请求完成得很晚。所以我的作用域的值是未定义的 下面是我的代码控制器代码: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
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();
}]);