这是我的循环:
for(var i = 0 ; i < addresses.length ; ++i){
var item = {}
item = addresses[i];
var mGeocode = null
getGeocode(item.x,item.y).then(function (_mGeocode){
mGeocode = _mGeocode
console.log('mGeocode',mGeocode)
console.log('item',item) // it shows last loop item
if(mGeocode.results[3]){
item['english_province'] = mGeocode.results[3].address_components[0].long_name
item['english_city'] = mGeocode.results[2].address_components[0].long_name
}else if(mGeocode.results[2]){
item['english_province'] = mGeocode.results[2].address_components[0].long_name
item['english_city'] = mGeocode.results[1].address_components[0].long_name
}else{
alert('change your location')
return false;
}
newAddresses.push(item)
});
}
我的控制台then
内显示我循环的最后item
!
getGeocode
函数称为Google Map API
答案 0 :(得分:4)
由于使用var
,这是关闭的类问题。更改迭代器和项目以使用let进行初始化,它将正常工作
for(let i = 0 ; i < addresses.length ; ++i){
let item = {}
item = addresses[i];
var mGeocode = null
getGeocode(item.x,item.y).then(function (_mGeocode){
mGeocode = _mGeocode
console.log('mGeocode',mGeocode)
console.log('item',item)
if(mGeocode.results[3]){
item['english_province'] = mGeocode.results[3].address_components[0].long_name
item['english_city'] = mGeocode.results[2].address_components[0].long_name
}else if(mGeocode.results[2]){
item['english_province'] = mGeocode.results[2].address_components[0].long_name
item['english_city'] = mGeocode.results[1].address_components[0].long_name
}else{
alert('change your location')
return false;
}
newAddresses.push(item)
});
}