2016-04-03 85 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);' –