【发布时间】:2014-05-09 14:26:32
【问题描述】:
我有一段代码
function a() {
for(var i = 0; i<10;i++) {
function b() {
//do something
}
setTimeout(b, 1000);
}
}
当我运行代码时,它运行良好,除了无需等待代码执行,就好像从来没有超时一样
编辑----更详细的代码。这段代码中有些东西不起作用,因为即使有一个在 500 毫秒和 800 毫秒之间变化的超时设置,也没有延迟,deltas 变量是 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;
}
【问题讨论】:
-
TLDR :
setTimeout(b, 1000*(i+1)); -
工作正常,等待 5 秒代码被执行。
-
@ProllyGeek - 除非它立即以相同的值执行 10 次。
-
@RobH 这是因为我是在函数执行之前设置的 OP 问题是延迟,不是吗?
标签: javascript