Javascript AngularJS:将$http.get数据分配给变量

Javascript AngularJS:将$http.get数据分配给变量,javascript,angularjs,angularjs-scope,angularjs-controller,angularjs-http,Javascript,Angularjs,Angularjs Scope,Angularjs Controller,Angularjs Http,我尝试将$http.get中的数据分配给控制器中的变量 $http.get(URL).success(function (data) { $scope.results = data; console.log('results in $http.get :'+ $scope.results); }); console.log('results after http.get'+ $scope.results); 第一个控制台日志从get打印数据。$http.g

我尝试将$http.get中的数据分配给控制器中的变量

 $http.get(URL).success(function (data) {
      $scope.results = data;
      console.log('results in $http.get :'+ $scope.results);
    });

 console.log('results after http.get'+ $scope.results);

第一个控制台日志从get打印数据。$http.get(url).success$scope.results之后打印为未定义。

这是因为
$http.get
是异步的。因此,在ajax请求完成之前,您的代码不会被搁置,相反,它将执行其余的代码。因此,第二个
console.log将在ajax请求完成之前执行。此时没有称为
$scope.results
的范围变量,该变量仅在请求完成后定义,这就是它打印
未定义的原因。您的第一个
控制台.log
只有在
$http
ajax成功完成后才会打印,此时您有
$scope.results
,它被分配给来自后端的
数据。

$http
是一个
异步
函数。它立即返回,但返回的是
承诺
不是实际结果。当请求完成时,调用
onsuccess


第二个(调用之外的一个)
console.log
$http
返回之前执行。

正如其他答案所指出的,该方法是异步的,因此它会立即返回。成功回调在完成并填充变量时被调用,如果绑定设置正确,UI将更新。现在我尝试获取如下数据:var getSomething=function(){return$http({method:'get',url:url});并将结果赋给变量:$scope.results=getSomething()@ktoress那么如何让http.get不异步并在作用域中获取值呢?该值无论如何都会转到$scope,但可能需要更长的时间(比如说半秒钟)。关键是你想在何时何地使用它。如果您想在视图上显示它,可以使用事件来确保它已加载或只是等待。如果另一个函数需要它,可以在suces()调用中调用该函数。