Проблема здесь в том, что функция setTimeout
запускает функцию checkMachineState()
немедленно, вместо ожидания 5 секунд.
Это потому, что setTimeout
ожидает имя функции (т.е.просто checkMachineState
без ()
).Но то, что введено, это выражение функции (функция с закрытием ()
, который будет запускаться javascript и принимать значение).
Но для передачи параметров odata
и INTERVAL
необходимо иметь круглые скобки.Решение состоит в том, чтобы обернуть вашу функцию в анонимное объявление функции (объявление функции обычно не приводит к ее запуску), например:
setTimeout(() => {checkMachineState(odata,INTERVAL)},5000);
Выполнитькод ниже, чтобы понять, что я имею в виду:
console.log("start");
setTimeout(console.log("This runs immediately because of the ()"),10000); //even if delay is 10 seconds
setTimeout(() => console.log("This waits 5 seconds before firing"), 5000);
Выше написано с помощью обозначения стрелки ES6.Вы также можете написать это как:
setTimeout(function() {checkMachineState(odata,INTERVAL)},5000);