Я хочу запустить следующий код:
ajaxUpdate(10);
С задержкой в 1 секунду между каждой итерацией. Как я могу это сделать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать для этого setInterval(). Создайте анонимную функцию для вызова и используйте время в миллисекундах:
var myInterval = window.setInterval(function() { ajaxUpdate(10); }, 1000);
Вы должны использовать window.setInterval () вместо только setInterval ()
мне нужно использовать var myInterval = ... или я могу просто вызвать код справа от =, и он будет работать?
Вам нужно только "var myInterval = ", если вы хотите снова остановить его в какой-то момент.
Это будет работать без задания, но, как объясняет Кент Фредрик в своем ответе, задание дает вам возможность отменить интервал позже.
Если вызывается без присваивания, будет ли код выполняться каждую секунду до тех пор, пока не будет отменен, или он будет запускаться только один раз?
Он продолжает работать - если вы хотите, чтобы он запускался один раз, используйте setTimeout вместо setInterval
@Click - setInterval сделает это за вас. Обычно считается очень плохой практикой не фиксировать идентификатор интервала с назначением, даже если вы не собираетесь использовать его прямо сейчас.
Я хочу, чтобы он запускался один раз, и одна и та же строка кода вызывалась снова, чтобы он снова запускался через 1 секунду. Я думаю, что ответ Райбаза ниже сделает это?
У меня будет динамическое количество работающих таймеров, поэтому я не хочу хранить идентификатор интервала для каждого из них (слишком сложно объяснять)
@Click - нет, raibaz answer (setTimeout) делает это только один раз, по сравнению с setInterval, который делает это многократно бесконечно.
вы можете хранить все эти интервалы в массиве для управления
@annakata, та же функция (ajaxUpdate) будет устанавливать строку из ответа Райбаза, если выполняются некоторые условия, которые означают, что обновление необходимо будет выполнить снова. Итак, когда код запускается через 1 секунду, он снова установит тот же таймер (при необходимости), и он запустится снова .. верно?
@anna, да, но тогда мне нужно сохранить, какой идентификатор массива соответствует какому идентификатору в базе данных и т. д., я хочу, чтобы все было как можно проще
э, я понятия не имею, зачем вам нужно записывать идентификаторы таймеров в базу данных. Они относятся только к пользователю.
Идентификатор элемента, для которого они получают обновление, из базы данных. Как я уже сказал, это сложно ...
Вы сбиты с толку, значение, возвращаемое "setInterval", представляет собой просто число, указывающее экземпляр таймер по отношению ко всем другим таймерам, которые в настоящее время находятся в области видимости браузера, это просто индекс массива. Если вы отправляете результат setInterval на сервер, вы почти безусловно делаете что-то не так
@click - это более эффективно и далеко яснее для вас, чтобы вы использовали интервал установки / очистки, когда вы имеете в виду что-то для итерации, чем постоянно устанавливать новый таймер. Единственным исключением является изменение периода. Есть причина, по которой ответы setInterval получают одобрение ...
(продолжение) Если, с другой стороны, типичный сценарий таков, что второй таймер не будет выполняться, то это не то, что я считаю итеративным, и setTimeout будет более подходящим.
Это сложно, но перед каждой итерацией я хочу, чтобы он проверял условие, и только если это правда, он должен запускать таймер.
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)
ссылка на документы javascript может стать хорошим дополнением: developer.mozilla.org/en/DOM/window.setInterval
Зачем вам ставить перед ним "окно". ?
Вы не обязаны, это просто хорошая идея, как я сказал в своем заявлении.
Вы также можете сделать это с помощью
setTimeout(function() {ajaxUpdate(10)}, 1000);
это будет только один раз, а не итеративно
Это правильный вариант для данной ситуации, потому что на каждой итерации b4 я хочу проверять условие, и только если оно выполняется, я хочу, чтобы таймер устанавливался 4 на следующей итерации. С setInterval он будет работать автоматически. без проверки условия, которое я не хочу. А этот 1 проще
Я считаю второй ответ (от Кента Фредрика) более полным и подробным. Он также предлагает несколько способов достижения вашей цели. Этот ответ тоже хорош, но он неполон и не так полезен для сообщества, поэтому я лично предлагаю вам принять ответ Кента.
Вы можете использовать функцию setTimeout (String fonc, Integer delay). Например, чтобы выполнять свой код каждую секунду, вы можете:
window.setTimout("ajaxUpate",100);
Надеюсь, я отвечу на ваш вопрос;)
ой, все ответят в одну и ту же минуту!
Использование строк крайне не рекомендуется, это слишком неоднозначно.
Кроме того, в вашем примере ajaxUpdate будет вызываться с полуслучайным значением, а не с фиксированным значением «10», которое он запросил.
Хорошо, спасибо за комментарий, я не знал, что он работает с функцией в качестве первого параметра.
Вы также можете использовать таймеры jQuery: http://plugins.jquery.com/project/timers
Вы можете использовать этот класс Таймер JavaScript.
Надеюсь, ваш сервер справится с избиением. :)