выполнение блока кода в определенное точное время в javascript - PullRequest
0 голосов
/ 25 апреля 2020

Я хочу выполнить блок кода (который включает в себя рекурсивный setTimeout) в определенное точное время в javascript. При написании функции get_current я получаю текущее время и с помощью метода setInterval с интервалом в 1 милсекунду сравниваю текущее время (извлекается из функции get_current) с моим желаемым временем, и если это условие удовлетворяет, я выполняю блок кода рекурсивно. Я тестирую свой код с помощью консольных сообщений, и я понимаю, что только один раз этот код выполняется, и если оператор проверяется только один раз. может ли кто-нибудь помочь мне сделать это ???

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");
    }
}

1 Ответ

0 голосов
/ 25 апреля 2020

Сначала давайте взглянем на документы : там написано, что setInterval принимает два основных параметра. Есть необязательные дополнительные параметры для передачи в function при его вызове, но давайте проигнорируем их и сосредоточимся на первых двух параметрах. Второй параметр - это время в миллисекундах, которое вам понятно. Первый параметр - function. Давайте посмотрим ваш звонок

setInterval(checkStart(),1);

Вы передаете checkStart() в качестве первого параметра. Это function звонок. В этом function нет return, что означает, что он «возвращает» undefined. Итак, ваш код выше функционально эквивалентен следующему:

checkStart();
setInterval(undefined,1);

Таким образом, решение должно состоять в том, чтобы вместо функции передать ее результат в setInterval:

setInterval(checkStart,1);

и как В результате следует регулярно вызывать checkStart.

...