Я пытаюсь выполнить функцию каждый час. Это существенно проверяет документы из MonoDB. Тем не менее, во время первого интервала сбой приложения метание следующее сообщение об ошибке:NodeJS setInterval таймер сбой после первого интервала
timers.js:252
callback.apply(this, args);
^
TypeError: Cannot call method 'apply' of undefined
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Вот отрывки из моих файлов:
валидатора
function validate() { ... }
module.exports = {
validate : validate
}
WWW
var validator = require('../lib/validator');
var app = require('../app');
app.listen(3000, function() {
setInterval(validator.validate(), 360000);
}
Это интересно, потому что я пробовал тот же подход в ** файле app.js **, который давал тот же результат. Но поскольку он перемещается внутри 'app.listen() {...}', он работает нормально. Я думаю, это может быть потому, что у меня были другие таймеры, такие как 'setImmediate()'. Тем не менее, мне все равно хотелось бы знать, будет ли 'setInterval()' в моем случае запускать событие один раз при запуске приложения, а затем на каждом заданном интервале – wshaheer
Если я что-то не хватает, я считаю, что реализация setInterval() одинакова между клиента и узла. Я бы проверил тест, в котором вы только передаете ссылку на метод, и используйте очень быстрый таймер, чтобы увидеть, стреляет ли он как запрограммированный.Мне было бы интересно узнать, действительно ли реализация Node действительно отличается, но не имеет большого смысла, что интервал будет использовать результат вашего вызова метода против ссылки при вызове в период времени. –