2

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

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

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

但它不起作用,同时在setInterval输出console.logHello World 的第二次交互中。

我做错什么了?

4

2 回答 2

5

外部间隔应为 2 秒。

于 2013-08-11T14:31:00.787 回答
0

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

我创建了一个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);
    }
}

And you call it like this :

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

JSFIDDLE:

you can check the jsfiddle Hope this help ☺</p>

于 2013-08-11T15:11:23.337 回答