Rya*_*yan 3 javascript google-maps
我正在尝试使用谷歌地图API并遇到一些麻烦.我创建了一个名为getPoint的函数,它接受一个地址.它使用google api使用GClientGeocoder.getLatLng(地址,回调)函数将该地址转换为GPoint对象.getLatLng()传递地址和回调函数,如下所示.我希望我编写的getPoint()函数返回从getLatLng()调用传递给回调函数的"point"变量.我正在努力弄清楚如何做到这一点,甚至可以做到这一点?
function getPoint(address) {
var geocoder = new GClientGeocoder();
return geocoder.getLatLng(
address,
function(point){
return point;
}
);
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
GClientGeocoder.getLatLng是一个异步操作,所以你不能让一个return语句getPoint实际上做你期望的.
您必须重构代码以获取回调函数,在异步操作完成时调用该函数:
function getPoint(address, callback) {
var geocoder = new GClientGeocoder();
geocoder.getLatLng(
address,
function(point){
/* asynch operation complete.
* Call the callback with the results */
callback(point)
}
);
}
Run Code Online (Sandbox Code Playgroud)
甚至更好(虽然触摸更深奥):
function getPoint(address, callback) {
var geocoder = new GClientGeocoder();
geocoder.getLatLng(
address,
callback // GClientGeocoder will call the callback for you
);
}
Run Code Online (Sandbox Code Playgroud)
编辑您的评论问题:
好的,这是另一个问题,但简而言之,只要您在定义了映射实例的同一范围内定义函数,您传递的JavaScript函数回调就可以访问您的映射实例:
var map = new GMap2(/*...*/);
var addresses = []; // list of address strings
for(var i=0; i < addresses.length; i++) {
getPoint(addresses[i], function(point) { // pass the callback function
map.addOverlay(/*...*/); // map variable is in scope
})
}
Run Code Online (Sandbox Code Playgroud)
这种函数称为闭包.
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |