Bing地图方向回调运行速度太快?

时间:2016-10-25 17:56:12

标签: javascript geocoding bing-maps

使用Bing Maps Api并进行地理编码时,我试图将回调中的纬度和经度存储在数组中。除了一般情况外,大多数情况下都有效。 entityToVisit中似乎总是存在重复的纬度和经度,但在调用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
            });

        }
    }

我注意到当我设置超时只是在回调中间将文本打印到控制台时,一切都运行良好。这似乎是一个糟糕的解决方案,有更好的解决方法吗?

1 个答案:

答案 0 :(得分:0)

您传递给entitiesToVisit数组的pinData对象是您传递给地理编码调用的userData选项的tempEntity值。该问题可能与此代码有关:

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