Sizi düzeltiyorsam, bu eşzamansız çağrı nedeniyle oluyor.
Asenkron, normal çalışma akışı dışarı alınır isteği göndererek (ya da daha doğrusu yanıt alma) anlamına gelir. Örneğinizde, $ .ajax hemen döner ve bir sonraki ifade, sonuç döndürür ;, iletilen işlevden önce yürütülürken, geri dönüş çağrısı bile çağrıldı.
Sen
$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
Edit 1 gibi yapmak gerekir:
Aynı için çok makale okudum ve asynchronous
çağrısının yanıtı normal dışarı alınacaktır fark nedir yürütme akışı. restangule
veya $http
numaralı çağrıları kullanırsanız, ikisi de asynchronous
numaralı çağrıdır. Yani derleyici cevabınızı beklemez. Derleyiciye ajax yanıtını beklemesini söylemelisiniz. Projelerimden birinde neler yaptım. İşte daha fazla örnek gösterebilecek basit bir örnek.
İlk önce bir denetleyici işlevi bildirdim.
$scope.asynchronousCallee = function(){
$http.get('/url').
success(function(data, status, headers, config) {
$scope.myAjaData = data;
});
}
$scope.asynchronousCallee(); //Call above function just after the declaration
Basitçe bu fonksiyon bu başarı işlevi bir
get
çağrıyla sunucudan veri almak ve değişkendeki yanıtı atamak ama unutmayın aşağıda gibi
asynchronously
çağrılır. Ne yaptım, bildirimin hemen ardından
asynchronousCallee
işlevini aradım. Şimdi derleyici bu fonksiyonun cevabını bekleyecek ve fonksiyonu yürüttükten sonra derleyici daha da ilerleyecektir. Onu seni Biz geri arama özelliği
http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ müthiş açıklama için bu blogu ziyaret edebilirsiniz ajax call.You tepkisini aldıktan sonra kod satırları yürütmek için geri arama işlevini kullanabilirsiniz :-)
Ne sorduğun belli değil. "$ Promise" öğesini "advertiserName" olarak atamak ister misiniz? Şu anda, muhtemelen, sonucu 'advertiserName' olarak doğru bir şekilde atamanız gerekiyor. sorun ne burada? –