Вы не можете остановить эти циклы worker()
вне функции. Javascript не имеет такой возможности.
Вам понадобятся эти циклы для проверки чего-либо, находящегося за пределами l oop (переменная или вызывающая функция или что-то подобное), чтобы вы могли влиять на них.
Есть много других способов записать l oop, на который может влиять внешний мир.
Некоторые примеры:
Используйте setInterval()
и получите интервал timerID из функции. Затем вы можете вызвать clearInterval()
, чтобы остановить l oop.
Создать небольшой объект, где ваш l oop - это один метод, и этот l oop протестирует переменная экземпляра, которую вы можете изменить извне.
PS Могут быть некоторые хаки, когда вы заменяете Promise
конструктором, который вызовет отклонение, что приведет к await
бросить и затем содержать async
функцию для отклонения в следующем цикле, но я предполагаю, что вы не ищете этот уровень взлома и вторжения в окружение.
Так как sleep()
объявлен как const
вы не можете взломать замену, которая отвергнет.