更新
它可能与Sleep in Javascript - delay between actions类似 但事实并非如此。在这个问题中,它只是一个简单的代码,它不嵌套在每个循环中,不需要阻止其代码的执行。 但在我的情况下,我甚至需要阻止每个循环,直到“else”块被执行,然后返回到每个循环。
这是我的代码:
function drawNoisesRadars(noises, radars) {
var noisesInATime = [];
var timeIndicator = noises[0].get('NoiseTime').trim();
$.each(noises, function (index, value) {
if (!value) {
return true;
}
var noiseTime = value.get('NoiseTime');
if (noiseTime == timeIndicator) {
noisesInATime.push(noises[index]);
}
else {
//----------------------------------------------
// wait for a second to draw the next one.
window.setTimeout(function () {
drawTimeSpecificNoisesRelatedRadars(noisesInATime, radars, timeIndicator);
// clear noisesInATime once drawing is finished.
clearArray(noisesInATime);
timeIndicator = value.get('NoiseTime');
noisesInATime.push(value);
}, 1000 + index * 1000);
//----------------------------------------------
}
});
}
在else块中,我希望有1秒钟来执行“else”块。但是如果我使用setTimeout()那么它会创建异步块,这意味着下一次迭代中的“if”块在“else”块被执行之前执行。
更新: 我不希望我的“else”块代码异步的原因是因为我需要timeIndicator在“drawTimeSpecificNoisesRelatedRadars()”的范围内保持相同,但由于setTimeout()使得块异步,问题来了 - > 在drawTimeSpecificNoisesRelatedRadars()完成之前更改timeIndicator的值。
我想阻止X秒的“else”代码的原因是: 如果我不阻止它,飞行飞机的动画将看起来像闪电 - >首先在一个地方显示,然后立即显示在目的地,而不显示“之间”。
很抱歉,解释我的代码情况真的很难。
我想要的只是一种方法,我可以简单地使用它:
..........
else {
drawTimeSpecificNoisesRelatedRadars(noisesInATime, radars, timeIndicator);
// clear noisesInATime once drawing is finished.
clearArray(noisesInATime);
//Need to be put inside a callback method as well.
//Reset the timeIndicator
timeIndicator = value.get('NoiseTime');
noisesInATime.push(value);
waitXSecond(X); // Synchronous method, it blocks the whole thread for X seconds.
}
waitXSecond(X); // Synchronous method, it blocks the whole thread for X seconds.
可以实现吗?
谢谢。