Аналог setTimeout, работающий под Android (в Chrome)

Пишу веб-страницу управления машинкой с камерой на ESP32. Предполагается работа в том числе через нестабильное соединение типа дачного edge, в котором любой запрос может задержаться на несколько секунд или потеряться. Для сохранения контроля приходится отправлять запросы типа "езжай вперёд" с интервалом около 100 мс пока соответствующая кнопка нажата, чтобы пройденное расстояние примерно соответствовало длительности нажатия. Страница с этим кодом корректно работает в chrome под windows, но отправляет только первый запрос под андроидом:

//Drive
function sendToRobot(text){
  const query = `${baseHost}/drive?var=${text}`
  fetch(query)
    .then(response => {
    console.log(`request to ${query} finished, status: ${response.status}`)
  })
}

function stop(){
  sendToRobot("stop")
}

function driveLeft(){
  buttonPressed = setTimeout(driveLeft, 100)
  sendToRobot("left")
}
leftButton.addEventListener('mousedown', driveLeft);
leftButton.addEventListener('mouseup', e => {clearTimeout(buttonPressed);stop()})

А как сделать страницу совместимой с андроидом? Копал в сторону webWorker, но ему ведь требуется отдельный js файл, который во-первых придётся отдельно хардкодить в прошивке ESP32 на C++, что будет не очень читаемо для потенциальных желающих развить проект (сам наткнулся на пару малочитаемых участков в примере, на базе которого пишу, неприятно), а во-вторых, я не понял не будет ли клиент после каждого нажатия на кнопку заново загружать скрипт вот по тому соединению, что окажется под рукой. Пока хочется без этих воркеров обойтись. Вешать страницу пока нажата кнопка тоже нельзя, видео с камеры на неё же идёт.


Ответы (0 шт):