2012-04-18 74 views
0

我跟蹤到this question,其中有一個異步請求繪製從A點到B點的路線,名爲setDirections。最後,我們希望端點位於中心位置,但默認情況下,地圖集中顯示大部分路線。在setDirections之後簡單地添加setCenter(endpoint)不會導致在端點處居中。如何在directionsDisplay結束後才能運行函數?

我推理使用setTimeout,setDirections似乎是另一個異步函數,因爲等待一會兒之後,地圖集中在我希望的位置。

那麼如何確保我的setCenter只在setDirections完成後才能運行?我想過回調,但它沒有做到我想要的。

在我的代碼我下面,使用模式從RecurialJavaScript Callback after calling function

  1. function wrapper (callback) {
  2. 方向請求包裝現有的方向上拉伸的代碼和附圖是異步的,所以成功響應塊內我叫 callback(this.marker.getPosition())
  3. 定義wrapper後,我打電話wrapper(function(latLng) { map.setCenter(latLng) })

這是一個JSFiddle。 http://jsfiddle.net/EeXQF/2/

setTimeout「解決方案」在那裏,只需要取消註釋。

回答

1

(說實話我真的不跟着你問什麼,我想有很多的背景你的問題,我只是不有。)

不過,有一點要注意,JavaScript是一般單螺紋。只有一個代碼是一次執行的。

所以你的代碼要求發生一些事情。但它通常不會發生,而您的代碼仍在運行。當代碼完成後,瀏覽器將執行它。 「開始」的操作將被添加到隊列中,並在稍後運行。

setTimeout,將回調添加到隊列末尾。所以主要功能將完成。地圖將有機會做它的東西(它有東西在隊列中),然後你的回調將觸發。

(它比現實中更復雜,但可能有助於解釋你所看到的)

+0

是的,我應該回去重寫它。感謝您指出了這一點。整個上半場無關緊要。 – 2012-04-18 17:30:05

+0

但它也比這更有趣。你真的沒有一個'問題'。還要說*你想要發生什麼,而發生什麼樣的動作會很有用。 – barryhunter 2012-04-18 17:32:34

相關問題