【问题标题】:How to run one statement after another in a procedural manner in Javascript?如何在Javascript中以程序方式运行一个又一个语句?
【发布时间】:2013-08-11 14:27:54
【问题描述】:

假设我们有一个简单的场景,我想在 1 秒后重复输出“Hello”,然后是“World”。我尝试了以下方法:

setInterval(
    function() {
        console.log("Hello");

        setTimeout(
            function() {
                console.log("World");
            },
            1000
        );
    },
    1000 
);

但这不起作用,在setInterval的第二次交互时console.log同时输出Hello World。

我做错了什么?

【问题讨论】:

  • 我认为你应该使用setTimeout(),而不是setInterval()
  • 他同时使用这两种方法。使用setInterval 触发的每个事件也会导致使用setTimeout 触发的一次性事件。
  • 将 setInterval 时间增加到 1100 会发生什么?目前,由于两者都是 1000,因此不能保证哪个会先发生。
  • 在这种情况下 setTimer 时间应该是 1100 / 2 = 550

标签: javascript procedural


【解决方案1】:

外部间隔应该是 2 秒。

【讨论】:

  • @chutsu,这不是愚蠢,也许只是缺乏咖啡))
【解决方案2】:

这不是对您问题的直接回答,但我认为它对您的情况很有用,

我创建了一个queue runner 函数,该函数接受一段时间后运行的函数列表

特点:

  • 您可以将任意数量的函数添加到队列中
  • 您可以设置是否要运行队列一次或重复序列
  • 仅使用setInterval 函数而不使用setTimeout

定义:

var queue = function ( /* Array<function> */ fn, /* int */ timeout, /* boolean */ repeat) {
    return function () {
        var i = 0,
            f = fn[i],
            t = setInterval(function () {
                f();
                if (fn[i + 1] !== undefined) {
                    f = fn[++i];
                } else {
                    if (repeat) {
                        i = 0;
                        f = fn[i];
                    } else {
                        clearInterval(t);
                    }
                }
            }, timeout);
    }
}

你这样称呼它:

var fn = [function(){console.log('A')}, function(){console.log('B')}];
queue(fn, 1000, true)();

JSFIDDLE:

您可以查看jsfiddle 希望对你有帮助☺

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多