我想在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");
}
}
首先,让我们来了解一下 文件: 它说: setInterval
需要两个主要参数。还可以选择其他参数传递给 function
当它被调用的时候,但我们忽略这些,专注于前两个参数。第二个参数是以毫秒为单位的时间,这个你就清楚了。第一个参数是一个 function
. 让我看看你的电话
setInterval(checkStart(),1);
你通过了 checkStart()
作为你的第一个参数。这是一个 function
呼叫。没有 return
在那 function
这意味着它 "返回" undefined
. 所以,你上面的代码与下面的代码在功能上是等价的。
checkStart();
setInterval(undefined,1);
所以,解决方案应该是把函数的结果传递给... ... setInterval
:
setInterval(checkStart,1);
结果是: checkStart
应定期调用。