gpt4 book ai didi

javascript - 异步执行作为参数传递的函数

转载 作者:行者123 更新时间:2023-12-02 14:44:06 26 4
gpt4 key购买 nike

我面临以下问题。我想使用谷歌的地理编码服务在 map 上绘制一些标记。但是,标记在地理编码完成其工作之前就已实例化。 drawMarker 函数将返回一个 Marker,其中 location 未定义。

我尝试将地理编码函数作为参数传递给drawMarker函数,并在那里执行它。我认为这样我就可以实现同步行为,但事实并非如此。简化代码如下:

drawMarker(i, map, codeAddress, locationsToConvert[i]);

function drawMarker(i, map, func, arg) {
var location = func.apply(this, [arg]);
return new google.maps.Marker({
position: {lat: location.lat, lng: location.lng},
map: map,
html: locations[i][0],
id: i
});
}

function codeAddress(address) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results[0].geometry.location
}
});
}

我的解决方案是什么,也许哪一个是最好的:

  • 使用 Promise 接口(interface)?
  • 在一个函数中完成所有操作并在地理编码服务的回调中实例化 Marker
  • 其他?

最佳答案

您可以尝试先获取地址,并在获得地址后从回调中调用drawMarker。将 drawMarker 编辑为接近其外观的内容,我没有完整的代码,因此可能不是 100% 正确。

codeAddress(locationsToConvert[i]);

function drawMarker(i, map, location) {
return new google.maps.Marker({
position: {lat: location.lat, lng: location.lng},
map: map,
html: locations[i][0],
id: i
});
}

function codeAddress(address) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
drawMarker(i, map, results[0].geometry.location);
}
});
}

关于javascript - 异步执行作为参数传递的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com