Зафиксируйте задачу и адрес
Этот разбор посвящён небольшому историческому предпросмотру комментариев. Выполняйте запрос внутри сервиса Node.js, где доступен fetch. Прочитайте process.env.REDDIT_FETCH_API_KEY и остановитесь при отсутствии значения ещё до обращения к архиву. В ответ пользователю вашего приложения должны попадать подготовленные данные для отображения, а не секрет, которым сервер подтвердил право на чтение.
Используйте https://api.redditfetch.com/v1/comments?subreddit=javascript&limit=3 и заголовок вида {"X-API-Key": key}. Authorization: Bearer <key> также поддерживается. Не подставляйте адрес из произвольного пользовательского ввода. Доступ к собственному маршруту и частоту его обновления контролирует ваше приложение. Решите заранее, когда повторное открытие экрана действительно должно запускать новый платный запрос, а когда достаточно сохранённого результата.
Сначала выясните, получен ли HTTP-ответ
Сетевой отказ приводит к исключению при await fetch. В таком случае у обработчика нет пригодного HTTP-ответа, который можно классифицировать. Напротив, статус 401 или 402 может прийти при нормально завершившемся обещании. Проверьте response.ok и обработайте неуспешный статус до того, как считать тело ответа страницей комментариев. Эти ветви нельзя объединять под сообщением об отсутствии записей.
При HTTP 400 исправьте параметры, при 401 проверьте ключ, при 402 — баланс. Для 429 можно предусмотреть ограниченное число повторов с задержкой. Не запускайте бесконечный повтор при любой ошибке. Потеря соединения возможна уже после оплачиваемого успеха на сервере, поэтому сетевое исключение не доказывает, что списания не было; успешный повтор оплачивается отдельно.
Прочитайте JSON и проверьте его структуру
На успешной HTTP-ветви вызов await response.json() тоже может завершиться ошибкой. В диагностике отличайте её от сетевого отказа. Затем проверьте ожидаемую оболочку ответа и убедитесь, что data является массивом. Успешный разбор JSON лишь создаёт значение JavaScript; он не подтверждает наличие подходящего текста в каждой записи. Поля для карточки проверяются отдельным шагом, прежде чем попасть в отображение.
Показывайте фрагменты без выдуманного дерева
Выбирайте только нужные экрану поля. Отсутствующее значение текста и пустая строка могут требовать разных подписей. Доступные идентификаторы сохраняйте для связи с исходной записью, а само содержимое выводите как текст. Комментарии плоские; дополнительные поля отношений, если они присутствуют, не подтверждают полноту ветки. Три записи не позволяют объявить собранными все ответы на комментарий.
Задайте местные состояния: загрузка, готово, пусто и ошибка. Проверенный пустой массив означает лишь отсутствие записей в этом ответе. Если записи были, но ни одна не прошла ваши проверки для карточки, отразите это отдельно в диагностике. При неудачном обновлении можно оставить прежний сохранённый предпросмотр, ясно обозначив его происхождение и время получения вашим приложением.
Решите, когда обращаться снова
Сохраните проверенный результат вместе с параметрами запроса до изменения локального прогресса. Повторное использование копии не вызывает новое списание; успешное обращение, даже пустое, стоит один кредит. Архивный порядок не является хронологическим. Расширение до нескольких страниц с пределами 100 записей на запрос и 100 страниц на условие также не доказывает исчерпывающего охвата.
Состав полей и смысл итогов уточняйте в документации, стоимость — в тарифах, доступ — на странице ключа. Публичный бесплатный /v1/status содержит статическое описание сервиса и не проверяет доступность архива. Подпись исторического источника должна оставаться видимой. Не обещайте читателю обновления в реальном времени, неизменный результат будущего запроса или полное обсуждение по этим фрагментам.