内部循环中的睡眠/延迟/超时

时间:2013-01-30 06:48:14

标签: javascript loops timeout delay sleep

我需要延迟我的JavaScript代码,但如果我在代码中创建超时函数,我会遇到问题。但是,如果我取出超时代码,它的工作完全正常。我在这里搜索了关于超时/延迟的其他帖子,但我认为我的情况有点不同。

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

(function myLoop(x) {

    page = 3;

    (function myLoop2(page) {
        //setTimeout(function () {   

        var name = myArray[x];

        alert(name + ' Page: ' + page);

        if (--page) myLoop2(page);
        //}, 1000 )
    })(page);

    if (x != 0) myLoop(--x);
})(x);

如果我删除代码中的注释,它会给我一个不同的输出。

2 个答案:

答案 0 :(得分:0)

不幸的是,JavaScript中没有睡眠或等待功能。 超时不会暂停程序执行。相反,它会安排在稍后的某个时间点执行该功能,并继续,好像此时没有发生任何事情。

因此,如果没有超时,代码将作为普通的嵌套循环运行。

使用超时时,内部循环变为“计划一次,并且当触发计划下一次”时。因此外部循环将安排每本书的所有第一页。 一秒钟后,第一页被触发,这将安排第二页。 在另一秒之后,第二页被触发,依此类推。

答案 1 :(得分:0)

是的,Javascript中没有睡眠/等待功能。但是你可以使用SetTimeout函数完成大部分所需的功能。

我认为以下代码会为您提供所需的结果。检查

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

   (function myLoop(x2) {

    page = 3;

    (function myLoop2(page1, x1) {


       setTimeout(function () {  var name = myArray[x1];

    alert(name + ' Page: ' + page1);

    if (--page1)  myLoop2(page1, x1);}, 1000 )

    })(page,x2); 

    if (x2 != 0)  setTimeout(function () {myLoop(--x2);}, 4000 )
})(x);

我们必须根据具体情况使用setTimeout函数。 setTimeout不会阻止代码流。

在Timed函数中使用全局变量将导致在执行的时间实例中使用变量。不是函数在setTimeout函数中定时的值。