在循环内承诺在之后获得最后一个项目

时间:2019-02-19 17:28:19

标签: 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
                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内显示我循环的最后itemgetGeocode函数称为Google Map API

1 个答案:

答案 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)
            });

        }