如果我得到您正確的,這是因爲異步調用發生。
異步裝置發送請求(或更確切地說在接收到響應)被取出的正常執行流程。在你的榜樣,立即 $就退貨和下一條語句,返回結果是;,你 作爲傳遞成功回調甚至被 調用該函數之前執行。
你應該做這樣
$scope.someFunction = function() {
Restangular.all('advertiser').one("?id=" + 1).getList().then(function(data) {
return $scope.advertiserName = data.name;
});
}
$scope.title = $scope.someFunction(); //It will give you output
編輯1:
我看了很多文章對於同什麼我注意到asynchronous
呼叫的響應將正常取出執行流程。無論您使用restangule
或$http
電話,都是asynchronous
通話。所以編譯器不會等待你的迴應。你需要告訴編譯器等待ajax響應。我在我的一個項目中做了什麼。這裏有一個簡單的例子可以說明更多。
首先我聲明的控制器功能。像下面
$scope.asynchronousCallee = function(){
$http.get('/url').
success(function(data, status, headers, config) {
$scope.myAjaData = data;
});
}
$scope.asynchronousCallee(); //Call above function just after the declaration
只需將此功能從服務器接收數據與get
呼叫並分配在不同反應,但請注意,這個成功函數將被調用asynchronously
。所以,我做什麼,我只是它的聲明後調用asynchronousCallee
功能。現在編譯器會等待這個函數的響應,並且在執行該函數之後,編譯器會繼續進行。我希望它可以幫助你的兄弟:-)
這甚至不清楚你在問什麼。你想把'$ promise'賦給'advertiserName'?現在你已經可能將結果正確地分配給'advertiserName';這裏有什麼問題? –