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)
}
}