2012-01-27 1 views
0

サードパーティのAPIとの同期に関する問題が発生しています。JavaScript - サードパーティのAPIとの同期の問題

私の "forループ"は、APIリクエスト をどんな順序でも返す可能性があるため、すぐに実行されているようです。

DoSomethingが同期して実行されるように、これを再構成するにはどうすればよいですか?

function startgeocoding() { 
    for(var x = 0; x < address2.length; x++) { 
     geocode(address); 
    } 
} 

function geocode(address) { 
    if (geocoder) {     
     geocoder.geocode({ 'address': address }, function (results, status) {   
     if (status == google.maps.GeocoderStatus.OK) { 
      DoSomething(); 
     } 
    } 
} 

答えて

2

あなたは、呼び出しのチェーンを作成するために、成功コールバックの次の要素にgeocode()を呼び出すことができます。呼び出しはまだ非同期ですが、最初の呼び出しが終了するまで次の呼び出しをジオコーディングしていません。ような何か:

var addresses = []; 

// this function really is optional, it's just copying an array 
function startGeocoding() { 
    for (var x = 0; x < addresses2.length; x++) { 
     addresses.push(addresses2[x]); 
    } 
    geocode(addresses.shift()); 
} 

function geocode(address) { 
    if (geocoder){     
     geocoder.geocode({ 'address': address }, function (results, status) {   
      if (status == google.maps.GeocoderStatus.OK) { 
       DoSomething(); 
       if (addresses.length > 0) { 
        // take first value 
        geocode(addresses.shift()); 
       } 
      } 
     }); 
    } 
} 

別のオプションは、あなたがそれを持っている方法それを残すが、結果をキューに、何らかの形でそれらを並べ替え、その後、一度、すべてのために完了した同期呼び出しのそれらに取り組むんするかもしれませんあなたは欲しい。

+0

+1気がキューと同じアイデアを持っていましたが、10倍速くなりました: – Luke