2016-04-03 64 views
0

我有在控制器中定义的变量:

app.controller('myController',['$scope','ajaxCall',function($scope,ajaxCall){ 
    $scope.interviewer = {}; 
    ajaxCall.get(/* A url */).then(function(response){ 
    $scope.interviewer = response.data; 
    console.log($scope.interviewer); 
}); 
console.log($scope.interviewer); 

AjaxCall的是用来做AJAX调用的定制服务。内部控制台工作正常(即它显示完整的数据),但外部控制台正在打印一个空的对象。为什么?

回答

2

因为第一个A in AJAX意思是“异步”。

传递给then()的函数异步执行,最后console.log()行后很长时间。一旦对异步HTTP请求的响应从服务器返回,它就会被执行。

如果它是同步的,我们不会打扰承诺和回调函数。我们只想做

var response = ajaxCall.get(url); 

但是,这是不可能的,所以我们做

ajaxCall.get(/* A url */).then(function(response){ 

这意味着:请发送该请求,并在响应可用,则调用该函数。在此期间,我会做很多其他的事情。

+0

谢谢@JB Nizet。我知道这个概念,但不能认为它是原因。但我必须在我的控制器的大部分使用数据,所以如何做,我不想在那里写很多代码()功能。 –

+0

声明函数'函数init(响应){...}',并使用'ajaxCall.get(url).then(init);' –