0

私はこの質問をフォローアップしています。ここでは、ポイント A から B へのルートを描画する非同期リクエストがあり、 と呼ばれsetDirectionsます。最終的には、エンドポイントを中心に配置する必要がありますが、デフォルトでは、ルートの大部分がマップの中心に表示されます。setCenter(endpoint)afterを追加するだけsetDirectionsでは、エンドポイントを中央に配置することにはなりません。

setDirections少し待った後、マップが希望どおりに中央に配置されるため、別の非同期関数のように見えるsetTimeoutを使用して推論しました。

setCenterでは、実行が完了した後にのみ実行できるようにするにはどうすればよいsetDirectionsでしょうか? コールバックについて考えましたが、私が望むことをしていません。

私のコードでは、 function を呼び出した後にRecurialおよびJavaScript 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 は通常シングル スレッドです。一度に実行されるコードは 1 ビットのみです。

したがって、コードは何かが起こるように要求します。ただし、コードがまだ実行されている間は、通常は発生しません。コードが終了すると、ブラウザーはそれを実行します。「開始」したアクションはキューに追加され、後で実行されます。

setTimeout は、キューの最後にコールバックを追加します。これでメイン関数は終了です。マップはその処理を実行する機会を得て (キューに処理がある)、コールバックが起動します。

(実際にはそれよりも複雑ですが、見ているものを説明するのに役立つかもしれません)

于 2012-04-18T17:27:42.703 に答える