我正在跟进这个问题,其中有一个异步请求来绘制从 A 点到 B 点的路线,称为 setDirections
。最后,我们希望端点位于中心,但默认情况下,地图中心显示大部分路线。简单地在setDirections
后添加setCenter(endpoint)
不会导致在端点处居中。
我通过使用setTimeout进行推理,setDirections
似乎是另一个异步函数,因为等待了一会儿后,地图会按照我的意愿居中。
那么,如何确保我的setCenter
仅在setDirections
完成后运行呢?我想过回调,但它没有做我想要的。
在我的代码中,我做了以下操作,在调用函数后使用递归和JavaScript回调的模式:
- 用
function wrapper (callback) {
包装现有的方向绘图代码 - 方向请求和绘图是异步的,因此在成功的响应块中,我调用
callback(this.marker.getPosition())
- 定义
wrapper
后,我称wrapper(function(latLng) { map.setCenter(latLng) })
这是一个JSFiddle。http://jsfiddle.net/EeXQF/2/
setTimeout"解决方案"就在那里,只需要取消注释。
(老实说,我并没有真正遵循你的问题,我想你的问题有很多背景,我只是没有。
但是,有一点需要注意,Javascript通常是单线程的。一次只执行一位代码。
所以你的代码要求发生一些事情。但通常不会在代码仍在运行时发生。浏览器将在您的代码完成后执行它。您"启动"的操作将添加到队列中,并在稍后运行。
setTimeout,将回调添加到队列的末尾。所以主功能将完成。地图将有机会做它的东西(它在队列中有东西),然后你的回调将触发。
(它比现实中更复杂,但可能有助于解释您所看到的内容)