我有一段代码
function a() {
for(var i = 0; i<10;i++) {
function b() {
//do something
}
setTimeout(b, 1000);
}
}
当我运行代码时,它运行正常,除了没有等待代码执行,好像从来没有任何超时
编辑----更详细的代码。有些东西在这段代码中没有用,因为即使有超时设置在500毫秒到800毫秒之间也没有延迟,增量变量是8
function dataServer() {
$.getJSON("/service/data/message", function(data) {
if(data) {
msgs = data;
check = true;
counter = 0;
var total = data.length;
waitTime = (60000 / total) - (8 * delay);
for(var message in data) {
var latLng = new google.maps.LatLng(-54.75, 148);
var marker = new google.maps.Marker({
position: latLng,
map: map,
optimized: true,
icon: new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(85, 60))
});
position = [-55, 148];
result = [ data[message].x, data[message].y ];
i = 0;
deltaLat = (result[0] - position[0])/numDeltas;
deltaLng = (result[1] - position[1])/numDeltas;
var w = 85;
var h = 60;
var shrinkW = w / 2;
var shrinkH = h /2;
var shrinkDeltaW = shrinkW / numDeltas;
var shrinkDeltaH = shrinkH / numDeltas;
var deltaW = w / numDeltas;
var deltaH = h / numDeltas;
var toSet = true;
function moveMarker(result){
position[0] += deltaLat;
position[1] += deltaLng;
if(i % 4 == 0) {
w -= deltaW;
h -= deltaH;
}
var latlng = new google.maps.LatLng(position[0], position[1]);
marker.setPosition(latlng);
marker.setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(w, h)));
if(i == (numDeltas - 1)) {
var latlng = new google.maps.LatLng(data[message].x, data[message].y);
marker.setPosition(latlng);
i++;
}
if(i!=numDeltas){
i++;
if(markerArray.length > 10) {
shrinkW -= shrinkDeltaW;
shrinkH -= shrinkDeltaH;
markerArray[0].setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(shrinkW, shrinkH)));
if(i == (numDeltas -1)) {
markerArray[0].setIcon(new google.maps.MarkerImage( image , undefined, undefined, undefined, new google.maps.Size(85, 60)));
markerArray[0].setMap(null);
markerArray.splice(markerArray[0], 1);
feature = map.data.getFeatureById(dataArray[0].countryCode);
if (feature) {
feature.setProperty('colour', dataArray[0].opacity);
} else {
}
dataArray.splice(dataArray[0], 1);
}
}
//delay = waitTime / 8;
setTimeout(moveMarker, waitTime);
}
}
moveMarker(result);
markerArray.push(marker);
dataArray.push(data[message]);
//if(stop) { break; }
}
} else {
dataServer();
}
});
if(check == false) {
counter++;
if(counter == 100) {
window.location.href = "/intermission.htm";
}
}
check = false;
}
答案 0 :(得分:0)
这里的主要问题是i
在超时之前在b
的闭包中被修改。这意味着将使用i = 10
执行10次超时。
您可以使用此模式来修复它:
function a() {
for(var i = 0 ; i < 10 ; i++) {
(function(i) {
function b() {
//do something
}
setTimeout(b, 1000);
})(i);
}
}