#javascript
#javascript
Вопрос:
Я использую самозапускающуюся функцию в скрипте, который я вызвал из расширения Chrome, которое я создаю.
У меня просто setInval
каждые 30 секунд. Моя проблема, если удваивается console.log
каждые 30 секунд, а не только один журнал.
Поэтому, когда страницы загружаются, они печатаются один раз. Затем через 30 секунд вместо печати еще одного он печатает 2 журнала. Затем 4, 8, 16 раз и т.д.
Очень странно.
(function check() {
console.log("Exists!");
return setInterval(check, 30000);
})();
Ответ №1:
setInterval
устанавливает интервал — он будет вызывать обратный вызов каждый интервал. Если вы вызываете setInterval
дважды, периодически будут выполняться 2 обратных вызова. Если у вас есть setInterval
, который рекурсивно вызывает себя, вы в конечном итоге получите 4, затем 8, затем 16 и т. Д. интервалы.
Либо удалите рекурсивный вызов:
setInterval(() => {
console.log("Exists!");
}, 30000);
Или используйте setTimeout
вместо:
(function check() {
console.log("Exists!");
return setTimeout(check, 30000);
})();
Ответ №2:
Потому что вы устанавливаете интервал внутри функции, чтобы она регистрировалась один раз, но также будет повторно регистрировать значения каждый раз. Интервалы сохраняются, поэтому интервалы суммируются.