如何仅在方向显示结束后运行函数



我正在跟进这个问题,其中有一个异步请求来绘制从 A 点到 B 点的路线,称为 setDirections 。最后,我们希望端点位于中心,但默认情况下,地图中心显示大部分路线。简单地在setDirections后添加setCenter(endpoint)不会导致在端点处居中。

我通过使用setTimeout进行推理,setDirections似乎是另一个异步函数,因为等待了一会儿后,地图会按照我的意愿居中。

那么,如何确保我的setCenter仅在setDirections完成后运行呢?我想过回调,但它没有做我想要的。

在我的代码中,我做了以下操作,在调用函数后使用递归和JavaScript回调的模式:

  1. function wrapper (callback) {包装现有的方向绘图代码
  2. 方向请求和绘图是异步的,因此在成功的响应块中,我调用 callback(this.marker.getPosition())
  3. 定义wrapper后,我称wrapper(function(latLng) { map.setCenter(latLng) })

这是一个JSFiddle。http://jsfiddle.net/EeXQF/2/

setTimeout"解决方案"就在那里,只需要取消注释。

(老实说,我并没有真正遵循你的问题,我想你的问题有很多背景,我只是没有。

但是,有一点需要注意,Javascript通常是单线程的。一次只执行一位代码。

所以你的代码要求发生一些事情。但通常不会在代码仍在运行时发生。浏览器将在您的代码完成后执行它。您"启动"的操作将添加到队列中,并在稍后运行。

setTimeout,将回调添加到队列的末尾。所以主功能将完成。地图将有机会做它的东西(它在队列中有东西),然后你的回调将触发。

(它比现实中更复杂,但可能有助于解释您所看到的内容)

最新更新