Javascript 承诺在循环内得到最后一项之后
这是我的循环:Javascript 承诺在循环内得到最后一项之后,javascript,promise,Javascript,Promise,这是我的循环: 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
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)
});
}
for(变量i=0;i
我的控制台在内,然后
打印我循环的最后一个项目
!!
getGeocode
函数称为google map api由于使用了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)
});
}
for(设i=0;i
这是由于使用了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)
});
}
for(设i=0;i
你的问题是什么?你的循环抛出n
调用getGeocode
,每次都增加i
。当这些getGeocode
调用完成时,循环早已完成。此时i
的值将是上次设置的值(最终迭代)。这篇文章解释得很好:你的问题是什么?你的循环抛出n
调用getGeocode
,每次都增加i
。当这些getGeocode
调用完成时,循环早已完成。此时i
的值将是上次设置的值(最终迭代)。本文对此进行了充分的解释: