【发布时间】:2017-11-01 19:54:58
【问题描述】:
编辑 - 我已通过使用 forEach 而不是 for 循环来解决此问题,因为这些项目是从数组中提取的
我正在使用此代码来检索要与 Leaflet.js 一起使用的给定地址的纬度和经度。
markers = [
{
"name": "Tom David",
"address": "Karachi, Pakistan",
"url": "https://en.wikipedia.org/wiki/Anguilla"
},
{
"name": "Bob Thomas",
"address": "London, Canada",
"url": "https://en.wikipedia.org/wiki/Japan"
},
{
"name": "Bob Mike",
"address": "Paris, FR",
"url": "https://en.wikipedia.org/wiki/Japan"
}
];
for ( var i=0; i < markers.length; i++ ) {
geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': markers[i].address}, function(results, status) {
L.marker([results[0].geometry.location.lat(), results[0].geometry.location.lng()]).bindTooltip(markers[i].address).addTo(map);
});
}
问题在于bindToolTip(markers[i].address),因为它似乎“破坏”了代码,但在使用字符串名称(如"Hello")时,它工作得很好。
这是由于循环在new google.maps.geocoder() 部分之后没有按预期工作。我曾尝试在上述代码下方使用alert(i),但由于某种原因,它只是将数字12 重复了三次。
当它放在geocoder() 部分上方时,它可以正常工作并迭代0、1 和2。
非常感谢您对此提供任何帮助。
总体
根据for循环中的当前
i值从数组中获取地址显示在
bindTooltip()部分中检索到的地址,以在地图中显示为工具提示值。
编辑
Asynchronous Process inside a javascript for loop 这个问题已被标记为显示的链接的副本,但我不确定提供的答案如何用于我自己的。有人可以帮我解决这个问题吗?
【问题讨论】:
-
@Hodrobond 感谢您的链接,虽然我真的不确定如何在我的代码中实现它?你能帮我解决这个问题吗?
-
IIFEs 可能是最容易实现的,具体取决于场景。 Here 是一个简单的例子。基本上创建一个anonymous function 并传入
i。 -
尝试类似
for (var i = 0; i < markers.length; i++) { (function(i){ geocoder = new google.maps.Geocoder(); geocoder.geocode({ 'address': markers[i].address }, function(results, status) { L.marker([results[0].geometry.location.lat(), results[0].geometry.location.lng()]).bindTooltip(markers[i].address).addTo(map); })(i) }); }的方法 -
@Hodrobond 非常感谢代码!出于某种原因,这次没有显示这些值。我尝试将
markers[i]更改为普通字符串以对其进行测试,并且标记甚至没有放在地图上
标签: javascript google-maps google-maps-api-3 google-maps-markers geocoding