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

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

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

22 ответов

56 просмотров

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

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
62
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
а где есть mysql cloud кроме яндекс-клауд?
Oleg Nosov
13
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
13
hi im a cs student. i need some advice from people who have enough experience in Embedded Software. I need to know whether this profession is suitable for me. I have watched s...
Sahand 🏔️
8
Не ну фпц - это уже просто троллинг какой-то. Элементарный код нельзя собрать. ЧЯДНТ? program Project1; {$mode delphi} uses SysUtils, Classes, Generics.Collections; var...
Peter
4
Кстати а покупал кто-нибудь ЭЦП для подписи кода? А то у меня на некоторых компах и ОС иногда SmartScreen винды программу за вирус принимал. Если купить такую ЭЦП и подписыват...
Дмитрий Завгородний
15
А кто-нибудь запихивал сборку перловых модулей/образов с perl приложениями в окружения без интернета (в специализированном CI/CD)? У меня сейчас есть ряд cpanfile, которые н...
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
14
Карта сайта