Вызов функции setInterval внутри метода setTimeout в java-скрипте с получением setInterval (...) не является ошибкой функции - PullRequest
0 голосов
/ 05 октября 2019

У меня есть простая функция setTimeout, которая запускается в определенное время и работает нормально:

var now = new Date();
var milliTillExec = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), 0, 0) - now;
if (milliTillExec < 59500) {
    milliTillExec += 59500; 
}
window.setTimeout(function(){
    console.log('at 59:500');
},milliTillExec); 

пытается добавить функцию, которая запускается каждые 300 миллисекунд после запуска предыдущей функции, поэтому я сделал так:

 function runEvery300Milli(){
    var t = new Date();
    window.setInterval(function(){
        if((t.getMinutes===59 && t.getMilliseconds>499)||(t.getMinutes===0 && t.getMilliseconds<500)){
            console.log(t.getMinutes()+ ":"+t.getSeconds() + ":"+ t.getMilliseconds());
        }
    }, 300)(); 
}
var now = new Date();
var milliTillExec = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), 0, 0) - now;
if (milliTillExec < 59500) {
    milliTillExec += 59500; 
}
window.setTimeout(function(){
    console.log('at 59:500');
    runEvery300Milli();
},milliTillExec);

но я получаю следующую ошибку:

Uncaught TypeError: setInterval(...) is not a function
    at runEvery300Milli

1 Ответ

4 голосов
/ 05 октября 2019

ваш setinterval выглядит как

setInterval(fn, 300)()

... поскольку setInterval возвращает undefined, это не функция, а причина ошибки

т.е. setIntervalэто функция, но она возвращает не просто - просто удалите () после , 300)

function runEvery300Milli(){
    var t = new Date();
    window.setInterval(function(){
        if((t.getMinutes===59 && t.getMilliseconds>499)||(t.getMinutes===0 && t.getMilliseconds<500)){
            console.log(t.getMinutes()+ ":"+t.getSeconds() + ":"+ t.getMilliseconds());
        }
    }, 300);  // <=== removed trailing ()
}
...