0
我似乎在尝试修改Angular.forEach循环内的全局变量时被卡住了。无法更新angular.forEach循环中的全局变量
我可以修改变量的罚款,但我似乎无法得到该变化适用于变量时访问的循环之外。
我已经尝试了各种'var self = this',并在整个循环中使用'this.addresses = []'来访问数组,但导致了同样的问题。当我得到我的“回报”声明时,我的变化就失去了。
下面的代码:
$scope.getLocation = function(val) {
var geocoderRequest = {
address: String(val),
componentRestrictions: {
'country': 'US'
}
};
var addresses = [1]; // **** shows addresses as [1] *****
geocoder.geocode(geocoderRequest, function(callbackResult) {
console.log('address in geocode: ' + addresses); // ***** shows addresses as [1] ****
var f = '';
angular.forEach(callbackResult.results, function(item) {
console.log('address in angular: ' + addresses); // **** shows addresses as [1] *****
if (item.types[0] == 'locality') {
for (f = 1; f < item.address_components.length; f++) {
if (item.address_components[f].types[0] ==
"administrative_area_level_1") {
addresses.push(item.address_components[0].short_name + ', ' + item.address_components[
f].short_name);
console.log('addresses in each: ' + addresses); // **** shows addresses as [1, 2, 3] after I 'push' 2 and 3 into addresses array ****
break;
}
}
}
});
});
console.log('addresses outside: ' + addresses); // ***** shows addresses as [1] even after pushing 2 and 3 *****
return addresses;
};
您需要使用回调函数中的AJAX调用的结果来完成所有工作。有关详细信息,请参阅[此问题](http://stackoverflow.com/q/14220321/497356)。 – 2014-09-24 00:35:25
有太多这样的类似问题,请检查[this](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call)和[this]( http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) – PSL 2014-09-24 00:35:59
查看https://docs.angularjs.org/api/ng/service/$q – Phil 2014-09-24 01:04:13