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

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

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

22 ответов

102 просмотра

А что за задача такая где тебе нужно 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 раз отправить.

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта