Есть способ настроить setInterval
метод javascript для немедленного выполнения метода и последующего выполнения с таймером.
javascript
setinterval
Jorge
источник
источник
function
один раз, а затем сделатьsetInterval()
Ответы:
Проще всего просто вызвать функцию самостоятельно в первый раз:
Однако есть веские причины, которых следует избегать
setInterval
- в частности, в некоторых случаях целая массаsetInterval
событий может поступать сразу после друг друга без каких-либо задержек. Другая причина в том, что если вы хотите остановить цикл, вы должны явно вызвать вызов,clearInterval
что означает, что вы должны помнить дескриптор, возвращенный из исходногоsetInterval
вызова.Таким образом, альтернативный метод должен иметь
foo
сам триггер для последующих вызовов, используяsetTimeout
вместо этого:Это гарантирует, что между вызовами есть хотя бы интервал
delay
. Это также облегчает отмену цикла при необходимости - вы просто не вызываете,setTimeout
когда достигается условие завершения цикла.Еще лучше, вы можете обернуть все это в немедленно вызванное выражение функции, которое создает функцию, которая затем вызывает себя снова, как описано выше, и автоматически запускает цикл:
который определяет функцию и запускает цикл сразу.
источник
setTimeout
?setInterval
событий может прибыть сразу после друг друга без каких-либо задержек.setTimeout
метод?Я не уверен, правильно ли я вас понимаю, но вы легко могли бы сделать что-то вроде этого:
Очевидно, существует множество способов сделать это, но это самый лаконичный способ, который я могу придумать.
источник
arguments.callee
недоступен в строгом режиме ES5Я наткнулся на этот вопрос из-за той же проблемы, но ни один из ответов не поможет, если вам нужно вести себя точно так же,
setInterval()
но с той лишь разницей, что функция вызывается сразу в начале.Вот мое решение этой проблемы:
Преимущество этого решения:
setInterval
может быть легко адаптировано путем заменыclearInterval()
позжеПример:
Чтобы быть дерзким, если вам действительно нужно использовать,
setInterval
то вы также можете заменить оригиналsetInterval
. Следовательно, при добавлении этого кода перед существующим кодом никаких изменений кода не требуется:Тем не менее, все перечисленные выше преимущества применимы здесь, но замена не требуется.
источник
setTimeout
решение, потому что оно возвращаетsetInterval
объект. Чтобы избежать вызова функций, которые могут быть позже в коде и, следовательно, не определены в текущее время, я обертываю первый вызов функции вsetTimeout
функцию следующим образом:setTimeout(function(){ func();},0);
первая функция затем вызывается после текущего цикла обработки, который также сразу , но больше ошибок доказано.Вы можете
setInterval()
добавить функцию, которая обеспечивает такое поведение:... тогда используйте это так:
источник
Вот обертка для симпатичной игры, если она вам нужна:
Установите для третьего аргумента setInterval значение true, и он будет запущен в первый раз сразу после вызова setInterval:
Или пропустите третий аргумент, и он сохранит свое первоначальное поведение:
Некоторые браузеры поддерживают дополнительные аргументы для setInterval, которые эта оболочка не учитывает; Я думаю, что они редко используются, но имейте это в виду, если они вам нужны.
источник
Для кого-то нужно привести внешнюю часть
this
внутрь, как будто это функция стрелки.Если вышеуказанное производство мусора беспокоит вас, вы можете вместо этого сделать закрытие.
Или , может быть , рассмотреть возможность использования в
@autobind
декоратора в зависимости от вашего кода.источник
Я предложу вызывать функции в следующей последовательности
Вы также можете передать в
_timer
Foo, если вы хотитеclearInterval(_timer)
при определенных условияхисточник
Вот простая версия для новичков без всего возни. Он просто объявляет функцию, вызывает ее, затем начинает интервал. Вот и все.
источник
Чтобы решить эту проблему, я запускаю функцию в первый раз после загрузки страницы.
источник
Есть удобный пакет npm под названием firstInterval (полное раскрытие, он мой).
Многие из приведенных здесь примеров не включают обработку параметров и изменение поведения по умолчанию
setInterval
в любом крупном проекте - зло. Из документов:Этот шаблон
идентично
Если вы работаете в браузере в старом классе и не хотите зависимости, это легко вырезать и вставить из кода.
источник
Хорошо, это так сложно, поэтому позвольте мне сказать проще:
источник
Вы можете установить очень маленькое начальное время задержки (например, 100) и установить желаемое время задержки в функции:
источник
Существует проблема с немедленным асинхронным вызовом вашей функции, потому что стандартный setTimeout / setInterval имеет минимальное время ожидания около нескольких миллисекунд, даже если вы прямо установите его на 0. Это вызвано работой браузера.
Пример кода с РЕАЛЬНОЙ нулевой задержкой, который работает в Chrome, Safari, Opera
Вы можете найти больше информации здесь
И после первого ручного вызова вы можете создать интервал с вашей функцией.
источник
на самом деле самое быстрое, чтобы сделать
это вызовет myfunction, а затем будет делать это каждые 45 секунд, что отличается от выполнения
который не будет называть это, но запланировать это только
источник
myFunction()
возвращает себя. Вместо того, чтобы модифицировать каждую функцию, вызываемуюsetInterval
ею, лучше подходитьsetInterval
один раз, как предлагают другие ответы.