169 похожих чатов

Здравствуйте, товарищи. В Javascript я совсем недавно, поэтому задаю довольно простые

вопросы.
Мне нужно выполнять функцию 5 раз с промежутком в 3 секунды, но в некоторых случаях нужно прекращать выполнение функции досрочно.
Казалось бы, всё просто: делать через таймер, получить идентификатор таймера:
let timerId = setTimeout(...);
И в нужный момент отменить:
clearTimeout(timerId);
Но возникает другой вопрос: допустим, мне нужно сделать 100 таких таймеров. Как быть в этой ситуации?
Если это поможет, в вызываемую функцию передаётся уникальный ID. Можно ли отменить по этому ID?

22 ответов

108 просмотров

А что за задача такая где тебе нужно 100 таймеров? Звучит так будто ты делаешь что-то не правильно

Делаешь переменную счетчика, когда выполняется сет интервал, плюсуешь его, когда понимаешь что уже кирдык то очищаешь)

Ну смотри вполне ок кейс, нужна пять раз что-то делать а на 6 раз останавливать это)

Не очень понятно, что за 100 таймеров. Но навскидку, можешь сделать функцию. Ты передаешь туда callback и время, она регистрирует таймаут или интервал и возвращает ID. По этому ID можешь останавливать. Если тебе нужно не останавливать, а именно в конкретный момент не выполнять функцию, можешь завести флаг-условие, а внутри функции проверять этот флаг. Или передавать ссылку на этот флаг в функцию-фабрику, и оборачивать callback в условие проверки этого флага

Quiero vivir en España- Автор вопроса
Семен Пурнемцев
А что за задача такая где тебе нужно 100 таймеров?...

Мессенджер, отправляющий сообщения (и сообщения о доставке) в радиоэфир. Сейчас всё работает, но иногда (помехи, отдалённость и т.д) репитер сообщение не видит. В этой ситуации выход такой: отправлять сообщение (либо сообщение о доставке) 5 раз, но как только репитер сообщение подхватил, отменять. То есть, смотрите, отправил я "Привет", "как дела" и следом "что делаешь?" пользователю. Первое репитер подхватил (таймер повтора отменяется), второе и третье - нет (нужно повторить). Повторяем второе и третье, второе сообщение "ушло", осталось третье - повторяем его отправку снова. А теперь представьте, что в это же самое время нам приходит 5 сообщений и на все нужно отправить сообщение "доставлено".

Quiero vivir en España- Автор вопроса
0xLDev
Делаешь переменную счетчика, когда выполняется сет...

И сколько таких переменных делать? Как потом в них не запутаться?

Quiero vivir en España- Автор вопроса
Quiero vivir en España
Мессенджер, отправляющий сообщения (и сообщения о ...

У меня идея такая: независимо ни от чего вызывать функцию каждые 2 секунды, а функция уже пусть смотрит, есть ли в очереди сообщения. То есть, нужно каждое сообщение добавлять в очередь и точно так же убирать из очереди.

Quiero vivir en España
У меня идея такая: независимо ни от чего вызывать ...

А не проще простой очередью воспользоваться?

Quiero vivir en España- Автор вопроса

Вот до этого я и дошёл. Вопрос - как очередь сделать?

0xLDev
Делаешь переменную счетчика, когда выполняется сет...

по такому же принципу работает сушка в уборных кажется нажал +1 к счетчику а каждую Н-секунду он уменьшается

Quiero vivir en España
Вот до этого я и дошёл. Вопрос - как очередь сдела...

Только придется определиться с алгоритмом, ФИФО или ЛИФО

Evgenii Saenko
Это мягко говоря совсем не очередь

в целом да, но если ему нужно прерывать действия в функции то как вариант можно использовать

Умя был синьор так он делал все одним таймером!! Точнее одной анимацией) если кадр пропустить то ставил условие)) какая разница что кадры читаются в пустую)))

Таймеры вообще бэд практис, скорее всего твою задачу можно решить без них

Quiero vivir en España- Автор вопроса

Ничего не понял. У меня 10 сообщений, каждое надо по 5 раз отправить.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта