Как установить таймер в javascript

Я хочу запустить следующий код:

ajaxUpdate(10);

С задержкой в ​​1 секунду между каждой итерацией. Как я могу это сделать?

Надеюсь, ваш сервер справится с избиением. :)

epascarello 20.01.2009 18:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
1
25 812
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете использовать для этого setInterval(). Создайте анонимную функцию для вызова и используйте время в миллисекундах:

var myInterval = window.setInterval(function() { ajaxUpdate(10); }, 1000);

Вы должны использовать window.setInterval () вместо только setInterval ()

Georg Schölly 20.01.2009 11:43

мне нужно использовать var myInterval = ... или я могу просто вызвать код справа от =, и он будет работать?

Click Upvote 20.01.2009 11:50

Вам нужно только "var myInterval = ", если вы хотите снова остановить его в какой-то момент.

Greg 20.01.2009 11:51

Это будет работать без задания, но, как объясняет Кент Фредрик в своем ответе, задание дает вам возможность отменить интервал позже.

Már Örlygsson 20.01.2009 11:52

Если вызывается без присваивания, будет ли код выполняться каждую секунду до тех пор, пока не будет отменен, или он будет запускаться только один раз?

Click Upvote 20.01.2009 11:55

Он продолжает работать - если вы хотите, чтобы он запускался один раз, используйте setTimeout вместо setInterval

Greg 20.01.2009 11:56

@Click - setInterval сделает это за вас. Обычно считается очень плохой практикой не фиксировать идентификатор интервала с назначением, даже если вы не собираетесь использовать его прямо сейчас.

annakata 20.01.2009 11:59

Я хочу, чтобы он запускался один раз, и одна и та же строка кода вызывалась снова, чтобы он снова запускался через 1 секунду. Я думаю, что ответ Райбаза ниже сделает это?

Click Upvote 20.01.2009 12:00

У меня будет динамическое количество работающих таймеров, поэтому я не хочу хранить идентификатор интервала для каждого из них (слишком сложно объяснять)

Click Upvote 20.01.2009 12:01

@Click - нет, raibaz answer (setTimeout) делает это только один раз, по сравнению с setInterval, который делает это многократно бесконечно.

annakata 20.01.2009 12:01

вы можете хранить все эти интервалы в массиве для управления

annakata 20.01.2009 12:02

@annakata, та же функция (ajaxUpdate) будет устанавливать строку из ответа Райбаза, если выполняются некоторые условия, которые означают, что обновление необходимо будет выполнить снова. Итак, когда код запускается через 1 секунду, он снова установит тот же таймер (при необходимости), и он запустится снова .. верно?

Click Upvote 20.01.2009 12:03

@anna, да, но тогда мне нужно сохранить, какой идентификатор массива соответствует какому идентификатору в базе данных и т. д., я хочу, чтобы все было как можно проще

Click Upvote 20.01.2009 12:04

э, я понятия не имею, зачем вам нужно записывать идентификаторы таймеров в базу данных. Они относятся только к пользователю.

Kent Fredric 20.01.2009 12:15

Идентификатор элемента, для которого они получают обновление, из базы данных. Как я уже сказал, это сложно ...

Click Upvote 20.01.2009 12:31

Вы сбиты с толку, значение, возвращаемое "setInterval", представляет собой просто число, указывающее экземпляр таймер по отношению ко всем другим таймерам, которые в настоящее время находятся в области видимости браузера, это просто индекс массива. Если вы отправляете результат setInterval на сервер, вы почти безусловно делаете что-то не так

Kent Fredric 20.01.2009 12:35

@click - это более эффективно и далеко яснее для вас, чтобы вы использовали интервал установки / очистки, когда вы имеете в виду что-то для итерации, чем постоянно устанавливать новый таймер. Единственным исключением является изменение периода. Есть причина, по которой ответы setInterval получают одобрение ...

annakata 20.01.2009 12:39

(продолжение) Если, с другой стороны, типичный сценарий таков, что второй таймер не будет выполняться, то это не то, что я считаю итеративным, и setTimeout будет более подходящим.

annakata 20.01.2009 12:40

Это сложно, но перед каждой итерацией я хочу, чтобы он проверял условие, и только если это правда, он должен запускать таймер.

Click Upvote 21.01.2009 03:54
var i = window.setInterval( function(){ 
          ajaxUpdate(10); 
 }, 1000 ); 

Это будет вызывать ajaxUpdate каждую секунду, пока он не будет остановлен.

И если вы захотите остановить это позже:

window.clearInterval( i ); 

Однако, если вы хотите запустить только однажды,

var i = window.setTimeout( function(){ 
          ajaxUpdate(10); 
 }, 1000 ); 

Сделает свое дело, и если вы хотите остановить его работу, прежде чем он успеет запустить один раз

window.clearTimeout(i); 

Префикс «окно» не является строго обязательным, но это хорошая идея, потому что вы никогда не знаете, когда кто-то другой может захотеть создать что-то еще с тем же именем в видимой области видимости, которое ведет себя по-другому.

Для получения полной справки по этому поводу я всегда нахожу очень полезным MDC:

Кроме того, вы можете прочитать эту статью о таймерах Джона Ресига,

Вы должны использовать window.setInterval () вместо только setInterval () (то же самое для clearInterval)

Georg Schölly 20.01.2009 11:43

ссылка на документы javascript может стать хорошим дополнением: developer.mozilla.org/en/DOM/window.setInterval

Már Örlygsson 20.01.2009 11:50

Зачем вам ставить перед ним "окно". ?

I.devries 20.01.2009 12:13

Вы не обязаны, это просто хорошая идея, как я сказал в своем заявлении.

Kent Fredric 20.01.2009 12:15
Ответ принят как подходящий

Вы также можете сделать это с помощью

setTimeout(function() {ajaxUpdate(10)}, 1000);

это будет только один раз, а не итеративно

annakata 20.01.2009 12:03

Это правильный вариант для данной ситуации, потому что на каждой итерации b4 я хочу проверять условие, и только если оно выполняется, я хочу, чтобы таймер устанавливался 4 на следующей итерации. С setInterval он будет работать автоматически. без проверки условия, которое я не хочу. А этот 1 проще

Click Upvote 21.01.2009 03:57

Я считаю второй ответ (от Кента Фредрика) более полным и подробным. Он также предлагает несколько способов достижения вашей цели. Этот ответ тоже хорош, но он неполон и не так полезен для сообщества, поэтому я лично предлагаю вам принять ответ Кента.

Teodor Sandu 04.12.2012 14:14

Вы можете использовать функцию setTimeout (String fonc, Integer delay). Например, чтобы выполнять свой код каждую секунду, вы можете:

window.setTimout("ajaxUpate",100);

Надеюсь, я отвечу на ваш вопрос;)

ой, все ответят в одну и ту же минуту!

damdec 20.01.2009 11:43

Использование строк крайне не рекомендуется, это слишком неоднозначно.

Kent Fredric 20.01.2009 11:43

Кроме того, в вашем примере ajaxUpdate будет вызываться с полуслучайным значением, а не с фиксированным значением «10», которое он запросил.

Kent Fredric 20.01.2009 11:47

Хорошо, спасибо за комментарий, я не знал, что он работает с функцией в качестве первого параметра.

damdec 20.01.2009 11:48

Вы также можете использовать таймеры jQuery: http://plugins.jquery.com/project/timers

Вы можете использовать этот класс Таймер JavaScript.

Другие вопросы по теме