0

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

我通过使用 setTimeout 进行推理,这setDirections似乎是另一个异步函数,因为在稍等片刻之后,地图将按我的意愿居中。

那么我怎样才能确保我的setCenter跑步只在setDirections完成之后呢?我考虑过回调,但它没有做我想要的。

在我的代码中,我使用RecurialJavaScript Callback 中的模式在调用函数后执行了以下操作:

  1. function wrapper (callback) {
  2. 方向请求和绘图是异步的,所以在成功响应块内,我调用 callback(this.marker.getPosition())
  3. 定义后wrapper,我打电话wrapper(function(latLng) { map.setCenter(latLng) })

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

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

4

1 回答 1

1

(老实说,我并没有真正按照您的要求进行操作,我想您的问题有很多背景,而我只是没有。)

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

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

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

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

于 2012-04-18T17:27:42.703 回答