运行代码一段时间

时间:2013-10-06 18:07:53

标签: javascript

试图搜索这样的东西,但是如果已经在某处已经回答过那么对不起就找不到确切的内容。

我需要在一段时间内运行一些代码 一段时间。 基本上我想在页面上快速显示一个数组中的随机值,我想让它继续显示1分钟然后停止。

下面的代码只会在3秒后开始,并且不会停止,我不知道如何实现这一点,所以任何帮助都非常感激。

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
    function getMessage() {
       return messages[Math.floor(Math.random() * messages.length)];
    }
    setTimeout(function () { oneSecondFunction(); }, 3000);
    function oneSecondFunction() {
        $('#test').html(getMessage());
        setTimeout('oneSecondFunction()', 100);
    }

由于

5 个答案:

答案 0 :(得分:1)

为设置标志的结束时间设置第二个超时,如果未设置标志,则仅重新安排oneSecondFunction

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
var stop = false;
function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(function () {
    setTimeout(function () { stop = true; }, 60000); // one minute later
    oneSecondFunction();
}, 3000);
function oneSecondFunction() {
    $('#test').html(getMessage());
    if (!stop) {
        setTimeout('oneSecondFunction()', 100);
    }
}

答案 1 :(得分:1)

记录自首次运行该功能以来已经过了多长时间,以及当该时间段大于一分钟时,只需不要续订setTimeout来电。

例如:

var timeStarted;

function getMessage() {
   return messages[Math.floor(Math.random() * messages.length)];
}

setTimeout(function () { oneSecondFunction(); }, 3000);

function oneSecondFunction() {
    var now = Date.now();
    timeStarted = timeStarted || now;

    $('#test').html(getMessage());

    if (now - timeStarted < 60000) {
        setTimeout(oneSecondFunction, 100); // you can just write function's name
    }
}

答案 2 :(得分:1)

尝试

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];

function getMessage() {
    return messages[Math.floor(Math.random() * messages.length)];
}

var interval = null;
setTimeout(function() {
    interval = setInterval(function() {
        // Your code here
        $("#test").html(getMessage());
    }, 100);

    //Stop the functions after 1 minute.
    setTimeout(function() { clearInterval(interval); }, 60 * 1000);
}, 3000);

这将在3秒后创建一个间隔,该间隔将每100毫秒执行一次代码1分钟。

答案 3 :(得分:1)

您只需要跟踪该功能运行的时间。然后测试时间是否结束。这是一个如何做到这一点的例子。

var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"],
    interval = 100,
    delay = 0;

    function getMessage() {
       return messages[Math.floor(Math.random() * messages.length)];
    }
    setTimeout(oneSecondFunction, 3000); // Less code is better.

    function oneSecondFunction() {
        $('#test').html(getMessage());
        delay+= interval;
        if (delay < (3 * 60 * 1000)) { // 3 minutes
             setTimeout(oneSecondFunction, interval);
        }
    }

答案 4 :(得分:0)

你不应该从oneSecondFunction setTimeout来实现make循环。而是使用setInterval函数并传递要调用的函数以及要睡眠的时间。然后使用区间ID调用clearInterval来停止它。像这样:

function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}

 function oneSecondFunction() {
 $("#test").html(getMessage());
}
var intervalID = setInterval(oneSecondFunction, <Delay between runs in millis here>);
function stop() {
clearInterval(intervalID);
}
setTimeout(stop, 60000);