调用内部异步回调后迭代for循环
Iterate for loop AFTER asynchronous callback inside has been invoked
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");
目前,如果stops.length
等于1,上述两个警报的顺序是for循环外的警报,然后是异步函数内的警报。
我如何改变这一点,使for循环只移动到下一次迭代,一旦map.addMarker
回调已经触发?我看过其他一些类似问题的问题,他们谈到为for循环提供闭包。我试过了,但是没有成功。
异步编程被认为是非阻塞的,这意味着在等待结果时不会暂停执行。所以你不能暂停for循环,直到函数完成。你可以这样写
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)
}
}
recursive(0, c, stop, stopMarkers, map,function(){})
相关文章:
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- 为什么我不能用for Each迭代对象
- 我的Javascript for循环在1次迭代后停止
- 在javascript for循环的迭代之间应用延迟
- 在 for 循环中查找变量的迭代总和
- 为什么这个 JavaScript switch 语句(在 for 循环内)保留了上一次迭代的值
- 如何验证for循环是否完成了node js中的所有迭代,循环是否包含带回调的函数调用
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- for循环只迭代一次
- node.js for循环在函数调用返回之前进行迭代,从而产生对象问题
- 使用for.of迭代时删除集合中的元素是否安全
- 如何在 angular.for 每次迭代期间推送新行
- 如何重新构建此 for 循环,以便在异步 api 调用完成之前不会进行下一次迭代
- For 循环在每次迭代后跳过一次
- 如何在中断之前遍历此 for 循环中的所有城市?现在它只是迭代一个
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- For 循环不迭代,输出的数据不超过第一个任务
- 在 Coffeescript 中强制迭代 for 循环
- 为什么脚本没有按预期迭代for循环?
- 调用内部异步回调后迭代for循环