Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止javascript等待X秒_Javascript - Fatal编程技术网

如何阻止javascript等待X秒

如何阻止javascript等待X秒,javascript,Javascript,更新: 它可能看起来与 但事实并非如此。在这个问题上,它只是一个简单的代码,不嵌套在each循环中,也不需要阻止代码的执行。 但在我的例子中,我甚至需要阻塞each循环,直到执行“else”块,然后返回each循环 这是我的密码: function drawNoisesRadars(noises, radars) { var noisesInATime = []; var timeIndicator = noises[0].get('NoiseTime').trim();

更新:

它可能看起来与 但事实并非如此。在这个问题上,它只是一个简单的代码,不嵌套在each循环中,也不需要阻止代码的执行。 但在我的例子中,我甚至需要阻塞each循环,直到执行“else”块,然后返回each循环


这是我的密码:

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”块代码异步的原因是,我需要时间指示器在“DrawTimeSpecificNoiseReslateDradars()”的范围内保持不变,但由于setTimeout()使块异步,因此问题出现-> 在DrawTimeSpecificNoiseReslateDradars()完成之前,时间指示器的值已更改。

我想在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.
这是可以实现的吗


谢谢。

不,Javascript中没有与synchronous
sleep()等价的东西。所有定时器功能都是异步的。如果您成功地实现了同步解决方案(例如,忙循环),那么现代浏览器将警告用户您的脚本正在阻塞,并提供终止脚本的功能。JavaScript是单线程和异步的。你必须用不同的思维去做你需要的事情。如果您希望我们帮助您,请更具体地说明您真正想做什么。@Franva,如果您需要在将控制权交还给循环之前运行
else
块,请取消对
setTimeout()的调用。
。这就是为什么它首先是异步的。@Franva,指出重复的不是我:)嗨@PatrickHofman,它看起来像是这个问题的重复,但事实并非如此。请看我的更新。