在javascript中,在特定的时间执行一段代码

问题描述 投票:0回答:1

我想在javascript中的某一特定时间执行一段代码(包括递归的setTimeout).通过编写get_current函数,我得到当前时间,并使用setInterval方法以1毫秒的时间间隔将当前时间(从get_current函数中获取)与我的期望时间进行比较,如果该条件满足,我将递归执行一段代码.我用控制台消息测试我的代码,我知道这段代码只执行一次,并且if语句只被检查一次.有人能帮助我做到这一点吗?

var dateString;
var delay=1500;

function get_current() {
    var mydate = new Date();
    var mili_real = mydate.getMilliseconds();
    var hour_real=mydate.getHours();
    var minute_real=mydate.getMinutes();
    var second_real=mydate.getSeconds();
    if(minute_real<10)minute_real="0"+minute_real;
    if(hour_real==0)hour_real="12";
    if(second_real<10) second_real="0"+second_real;
    if(mili_real<10)mili_real="00"+mili_real;
    else if(mili_real<100) mili_real="0"+mili_real;

    dateString=hour_real+""+minute_real+""+second_real+""+mili_real;        
}

setInterval(checkStart(),1);

function checkStart() {
    get_current();
    if (dateString == 145412578) {
        var timerId = setTimeout(
            function request() {                               
                console.log("request"+delay);
                if(delay<1600){
                    delay++;
                } else {
                    delay--;
                }
                timerId=setTimeout(request,dealy);

        }, delay);      
    } else {
        console.log("waiting to start");
    }
}
javascript settimeout setinterval
1个回答
0
投票

首先,让我们来了解一下 文件: 它说: setInterval 需要两个主要参数。还可以选择其他参数传递给 function 当它被调用的时候,但我们忽略这些,专注于前两个参数。第二个参数是以毫秒为单位的时间,这个你就清楚了。第一个参数是一个 function. 让我看看你的电话

setInterval(checkStart(),1);

你通过了 checkStart() 作为你的第一个参数。这是一个 function 呼叫。没有 return 在那 function这意味着它 "返回" undefined. 所以,你上面的代码与下面的代码在功能上是等价的。

checkStart();
setInterval(undefined,1);

所以,解决方案应该是把函数的结果传递给... ... setInterval:

setInterval(checkStart,1);

结果是: checkStart 应定期调用。

© www.soinside.com 2019 - 2024. All rights reserved.