Представим, что ваше, гипотетическое приложение, должно выполнить очередь 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 } }
Таким простым образом, при каждой итерации наш алгоритм будет проверять статус сети, и встанет на паузу если соединения не будет. И автоматически продолжит выполнение с того же места, как только связь будет восстановлена.
Конечно, это не панацея. Но такой, небольшой хак, сделает ваше приложение чуть более отказоустойчивым.

