Javascript 在调用内部异步回调后迭代for循环 (b;b

Javascript 在调用内部异步回调后迭代for循环 (b;b,javascript,Javascript,当前,如果停止,则上述两个警报的顺序。长度等于一个是for循环外部的警报,然后是异步函数内部的警报 如何更改此设置,使for循环仅在map.addMarker回调启动后才移动到下一个迭代?我已经研究了其他一些类似问题,他们讨论了为for循环提供闭包。我尝试了这一点,但没有成功。异步编程是非阻塞的,这意味着在等待结果时不会暂停执行。因此,在函数完成之前,不能暂停循环。你可以这样做 for (b; b < stops.length; b += 1) { (function (b, c,

当前,如果
停止,则上述两个警报的顺序。长度等于一个是for循环外部的警报,然后是异步函数内部的警报


如何更改此设置,使for循环仅在
map.addMarker
回调启动后才移动到下一个迭代?我已经研究了其他一些类似问题,他们讨论了为for循环提供闭包。我尝试了这一点,但没有成功。

异步编程是非阻塞的,这意味着在等待结果时不会暂停执行。因此,在函数完成之前,不能暂停循环。你可以这样做

for (b; b < stops.length; b += 1) {
    (function (b, c, stops, stopMarkers, map) {
        var matchFound = false;

        for (c; c < stopMarkers.length; c += 1) {
            if (stopMarkers[c].code === stops[b].atcocode) {
                // Already on the map
                matchFound = true;
            }
        }

        // If the stop isn't already on the map
        if (!matchFound) {
            map.addMarker({
                icon: icons.busStop,
                position: new plugin.google.maps.LatLng(stops[b].latitude, stops[b].longitude)
            }, function (marker) {
                alert("I SHOULD FIRE BEFORE LOOP HAS FINISHED!");
                marker.code = stops[b].atcocode;
                stopMarkers.push(marker);
            });
        }
    })(b, c, stops, stopMarkers, map);
}

alert("I SHOULD FIRE AFTER LOOP HAS FINISHED");
函数递归(b、c、停止、停止标记、映射、回调){
if(b==stopmarks.length){
返回true;
回调。调用(此);
}
var matchFound=false;
对于(c;c

递归(0,c,stops,stopmarks,map,function(){})

使用递归函数instead@adeneo你能在回答中提供一个例子吗?
function recursive(b, c, stops, stopMarkers, map,callback) {
        if(b==stopMarkers.length){
             return true;
             callback.call(this);
        }
        var matchFound = false;

    for (c; c < stopMarkers.length; c += 1) {
        if (stopMarkers[c].code === stops[b].atcocode) {
            // Already on the map
            matchFound = true;
        }
    }

    // If the stop isn't already on the map
    if (!matchFound) {
        map.addMarker({
            icon: icons.busStop,
            position: new plugin.google.maps.LatLng(stops[b].latitude, stops[b].longitude)
        }, function (marker) {
            alert("I SHOULD FIRE BEFORE LOOP HAS FINISHED!");
            marker.code = stops[b].atcocode;
            stopMarkers.push(marker);
            recursive(b+1, c, stops, stopMarkers, map,callback);
        });
    }
    else{
          recursive(b, c, stops, stopMarkers, map,callback)
    }
}