Выбор ответа Middle Ошибки обновлено

Какой catch написан правильно

Вопрос

Функция сохраняет черновик и при отсутствии сети должна молча отложить запись. Какой catch правильный?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: catch (e) { if (e instanceof NetworkError) queueDraft(); else throw e; }. Ловить стоит только то, что умеешь обработать.

Варианты ответа

  1. catch (e) { if (!navigator.onLine) return queueDraft(); console.error(e); }
  2. catch (e) { console.log(e); queueDraft(); return; }
  3. catch (e) { queueDraft(); }
  4. catch (e) { if (e instanceof NetworkError) queueDraft(); else throw e; }правильный ответ

Разбор

Ловить стоит только то, что умеешь обработать. Отсутствие сети это ожидаемая ситуация, её обрабатываем; всё остальное (баг в коде, ошибка сервера, TypeError) пробрасываем выше, где его залогируют или покажут. Первый вариант при любой ошибке, кроме офлайна, только пишет её в консоль и глотает, а второй логирует и откладывает запись при любой ошибке, выдавая баг за «нет сети». Третий вариант тоже глотает любые ошибки и маскирует их под «нет сети».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме