Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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顺序执行_Javascript_Html_Jquery - Fatal编程技术网

Javascript顺序执行

Javascript顺序执行,javascript,html,jquery,Javascript,Html,Jquery,嗨,我无法按顺序执行javascript。事件是如何触发的。即使语句按顺序放置,执行也是疯狂的 我需要从6到0的倒计时数字,然后在Div标记中显示随机字符串 JSfiddle 它遵循异步执行模式,因为您使用的是setTimeout 这里的解决方案是使用回调,它将在倒计时完成后调用,并使用回调显示文本 function counter($el, n, callback) { (function loop() { $el.html(n); if (n--)

嗨,我无法按顺序执行javascript。事件是如何触发的。即使语句按顺序放置,执行也是疯狂的

我需要从6到0的倒计时数字,然后在Div标记中显示随机字符串

JSfiddle


它遵循异步执行模式,因为您使用的是
setTimeout

这里的解决方案是使用回调,它将在倒计时完成后调用,并使用回调显示文本

function counter($el, n, callback) {
    (function loop() {
        $el.html(n);
        if (n--)   {
            setTimeout(loop, 1000);
        } else {
            callback();
        }
    })();
}


//Sequential execution (i need the count down first then the strings)
$("div").html(counter($("div"), 6, function(){
    $("div").html(questions()).fadeIn('slow');
})).fadeIn('slow');

演示:

理解此代码执行的关键是要认识到计数器()仅在执行一次循环后立即返回。在计数器内部定义的loop()在浏览器的事件循环中以1秒的间隔调用。在它运行n个循环之后,它将调用回调。谢谢你,阿伦,但是如果我只想在开始时显示计数器,并在一段时间延迟后重复显示问题,该怎么办。。。
function counter($el, n, callback) {
    (function loop() {
        $el.html(n);
        if (n--)   {
            setTimeout(loop, 1000);
        } else {
            callback();
        }
    })();
}


//Sequential execution (i need the count down first then the strings)
$("div").html(counter($("div"), 6, function(){
    $("div").html(questions()).fadeIn('slow');
})).fadeIn('slow');