Javascript异步/等待ajax调用

Javascript异步/等待ajax调用,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我正在使用ajax和谷歌地图。我想使用异步调用在地图上创建(并在之后刷新)标记。。这是我的密码: function createMarker(){ for (var i in selectedTrucks) { var urlReq = '/ajaxRequest/getSingleTruckPosition/' + selectedTrucks[i]; console.log("Launching createMarker() request on: " + urlR

我正在使用ajax和谷歌地图。我想使用异步调用在地图上创建(并在之后刷新)标记。。这是我的密码:

function createMarker(){
    for (var i in selectedTrucks) {

    var urlReq = '/ajaxRequest/getSingleTruckPosition/' + selectedTrucks[i];
    console.log("Launching createMarker() request on: " + urlReq);

    $.ajax({
        url: urlReq,
    })
    .done(function(data) {

        var equipValue = jQuery.parseJSON(data);

        if(equipValue == null)
            console.log(selectedTrucks[i] + " has no position.");
        else{
            //console.log("Creating marker n° " + i + " on position: lat: " + equipValue.latitudine + " lng: " +  equipValue.longitudine);
            console.log("Creating marker n° " + i + " on position: lat: " + equipValue.LATITUDINE + " lng: " +  equipValue.LONGITUDINE);
            markers[i] = new google.maps.Marker({
                position: new google.maps.LatLng(equipValue.LATITUDINE,  equipValue.LONGITUDINE),
                map: map,
                //icon: iconBase + 'truck.png'
            });


            var infowindow = new google.maps.InfoWindow(); // popup marker 

            makeInfoWindowEvent(map, infowindow, "Marker: " + i, markers[i]);

            markers.push(markers[i]);

        }
    })
    .fail(function() {
        console.log("Ajax failed to fetch data on createmarker")
    })

}

}
基本上所有功能都可以正常工作,但当我启动makeInfoWindowEvent()时,标记索引始终是for循环的最后一个。我认为使用for的ajax回调有问题。 在ajax调用期间如何停止for循环

有一些像c#等着你?我是JS的新手您的回调函数(在
.done
内)仅在
for
循环完成后调用,因为它是异步的

因为您需要在回调中使用索引的值,所以需要将ajax调用包装在一个立即执行的函数中,并将索引传递给它。比如:

for (var i=0;i<length;i++){
  (function(i){

    //make all your async calls using `i`

   })(i);
}
(变量i=0;i)的