2012-04-18 18 views
0

setDirectionsと呼ばれるポイントAからBへのルートを描画する非同期要求がある場合は、this questionまでフォローしています。最終的には、エンドポイントを中心にしたいが、デフォルトでは地図の中心がルートの大部分を表示する。 setDirectionsの後に単にsetCenter(endpoint)を追加しても、エンドポイントでセンタリングが行われません。directionsDisplayの終了後にのみ関数を実行するにはどうすればよいですか?

私はsetTimeoutを使って推論しましたが、もう一度非同期関数であるようです。なぜなら、少し待ってから、私が望むように地図が中心になるからです。

setDirectionsの実行後にsetCenterが実行されるようにするにはどうすればよいですか?私はコールバックについて考えましたが、私がしたいことをしていません。私はRecurialJavaScript Callback after calling functionからパターンを使用して、以下のなかった私のコードで

  1. 既存の方向性は非常に成功した応答ブロック内で、方向が要求と描画が非同期であるfunction wrapper (callback) {
  2. で描画コードをラップ、私はwrapperを定義した後、私はwrapper(function(latLng) { map.setCenter(latLng) })
  3. 呼び出す callback(this.marker.getPosition())
  4. を呼び出す

ここにJSFiddleがあります。 http://jsfiddle.net/EeXQF/2/

setTimeoutの「解決策」はありますが、コメントを外す必要があります。

答えて

1

(私は本当にあなたが尋ねるものをフォローいけない正直に言うと、私はちょうど持っていけないあなたの質問、背景がたくさんあると思います。)

しかし、注意すべき一つのこと、Javascriptが一般的に単一でありますスレッド化されています。一度に1ビットのコードしか実行されません。

あなたのコードは何か起こるように要求します。しかし、あなたのコードがまだ動いている間、それは一般的には起こり得ません。コードが完了したら、ブラウザはそれを実行します。開始したアクションはキューに追加され、後で実行されます。

setTimeoutは、コールバックをキューの最後に追加します。したがって、主な機能は終了します。マップはそのことをする機会を得ます(それはキューに入っています)、あなたのコールバックが起動します。

(現実よりもその多くの複雑な、しかし、あなたが見て何を説明するのに役立つかもしれない)

+0

ええ、私は本当に戻って、それを書き換える必要があります。それを指摘してくれてありがとう。前半全体は無関係です。 –

+0

しかしそれはまたそれよりもfundermentalです。あなたは本当に「質問」を持っていません。また、あなたが何をしたいのか、何が起こっているのか、と言います。 – barryhunter

関連する問題