Как стать автором
Обновить

Приостанавливаем выполнение приложения, если пропало соединение с сетью

Время на прочтение1 мин
Количество просмотров6.2K
Под катом, небольшая заметка о том, как приостановить выполнение вашего приложения при обрыве связи с интернетом и продолжить — когда она будет восстановлена.

Представим, что ваше, гипотетическое приложение, должно выполнить очередь http запросов. При чем каждый следующий зависит от результата предыдущего.

async function main () {
  let url = ' ... '

  while (url) {
    const resp = await fetch(url)
    const json = await resp.json()
    url = json.url
  }
}

Но если посреди этого процесса пропадёт связь с интернетом, то очередь прервётся. Давайте исправим это.

Для начала напишем функцию, которая будет возвращать промис, который будет решатся, в момент, когда клиент возобновит соединение:

function awaitOnline () {
  return new Promise(resolve => {
    // Если клиент уже online — немедленно возвращаем результат
    if (navigator.onLine) {
      resolve()
      return
    }

    // Регистрируем обработчик и решаем промис как только клиет будет online
    window.addEventListener(
      'online',
      () => resolve(),
      {once: true} // Автоматически удаляем обработчик после первого события
    )
  })
}

Теперь добавим её в наш основной код

async function main () {
  let url = ' ... '

  while (url) {
    await awaitOnline() // Выполнение приостановится в этом месте до момента возобновления сети
    const resp = await fetch(url)
    const json = await resp.json()
    url = json.url
  }
}

Таким простым образом, при каждой итерации наш алгоритм будет проверять статус сети, и встанет на паузу если соединения не будет. И автоматически продолжит выполнение с того же места, как только связь будет восстановлена.

Конечно, это не панацея. Но такой, небольшой хак, сделает ваше приложение чуть более отказоустойчивым.
Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+12
Комментарии14

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань