2016-10-25 2 views
0

Bing Maps Apiを使用してジオコーディングを行っているとき、私はコールバックから配列に緯度と経度を格納しようとしています。ほとんどの場合、これは通常は1つを除いて動作します。 entitiesToVisitでは重複した緯度と経度が常に存在するようですが、CalculateOptimizedDirectionsが呼び出されたときにはtestLocationsではなくなります。ビングマップの指示コールバックが速すぎますか?

for(var i = 0; i < toVisit.length; i++){ 
     if(toVisit[i].checked){ 
      var count = parseInt(toVisit[i].id.toString().split(":")[0]); 
      var tempEntity = entitiesToPickFrom[count]; 
      console.log(entitiesToPickFrom[count]); 
      tempEntity.compositeAddress = document.getElementById("d"+toVisit[i].id.toString().split(":")[1]).innerHTML.split(">")[1].split("<")[0]; 
      config.searchManager.geocode({ 
       where: tempEntity.compositeAddress, 
       count: 1, 
       callback: function (result, pinData) { 
        var topResult = result.results && result.results[0]; 
        if (topResult) { 
         pinData.latitude = topResult.location.latitude; 
         pinData.longitude = topResult.location.longitude; 
         entitiesToPickFrom[count].latitude = topResult.location.latitude; 
         entitiesToPickFrom[count].longitude = topResult.location.longitude; 
         //entitiesToVisit.push(pinData); 
         //setTimeout(10,function(){console.log("Pin Data");}); 
         //console.log(entitiesToVisit); 
         document.getElementById("BingMap").style.display = "block"; 
         var wizardDiv = document.getElementById("AddressSelectioWizard"); 
         wizardDiv.style.display = "none"; 
         //possible issue 
         testLocations.push(new Microsoft.Maps.Location(pinData.latitude,pinData.longitude)); 
         entitiesToVisit.push(pinData); 
         //testLocations.push(new Microsoft.Maps.Directions.Waypoint(tempEntity.latitude,tempEntity.longitude)); 
         if(entitiesToVisit.length >= checkedCheckers){ 
          CalculateOptimizedDirections(); 
         } 
        } 
        else{ 
         //console.log("Nothing gotten"); 
         console.log(result); 
         //console.log(tempEntity.compositeAddress); 
        } 
       }, 
       errorCallback: function (error){console.log(error)}, 
       userData: tempEntity 
      }); 

     } 
    } 

私はちょうど、コールバックの途中でコンソールにテキストを印刷するためにタイムアウトを設定すると、すべてが完璧に動作していることに気付きました。これは悪い解決策だと思われますが、そこには良い方法がありますか?

答えて

0

entitiesToVisit配列に渡すpinDataオブジェクトは、ジオコード・コールのuserDataオプションに渡すtempEntity値です。問題はこのコードに関連している可能性があります。

var count = parseInt(toVisit[i].id.toString().split(":")[0]); 
var tempEntity = entitiesToPickFrom[count]; 
+0

ありがとうございます。無関係のバグを発見しましたが、ジオコーディングの結果はその時点を超えているようです。 – Daniel

関連する問題