5 вещей, в которых ИИ ошибается при работе с Fetch API

ИИ-ассистенты пишут код, который выглядит правильным. Но они не пишут код, который является правильным.

Большинство моделей предлагают простой сниппет с fetch. Он работает в демо-режиме, но ломается в продакшене. Fetch API — это низкоуровневый инструмент, а не полноценный HTTP-клиент. Он требует от вас принятия архитектурных решений, которые ИИ принять не может.

Вот 5 способов, которыми ИИ ошибается в fetch:

  • Обработка ошибок ИИ предполагает, что при неудачном запросе промис переходит в состояние reject. Это неверно. Ошибки 404 или 500 не вызывают блок catch. Вы должны проверять response.ok вручную. Если этого не сделать, ваше приложение будет воспринимать страницы с ошибками как успешные данные.

  • Отмена запросов ИИ часто забывает использовать AbortController. Это приводит к утечкам памяти и состоянию гонки (race conditions) в таких фреймворках, как React. Если пользователь быстро переключается по списку, старые запросы могут завершиться после новых. В итоге в интерфейсе отображаются устаревшие данные. Также необходимо фильтровать AbortError, чтобы не показывать сообщения об ошибках при намеренной отмене запроса.

  • Потоковая передача данных ИИ рассматривает ответы как единые блоки. Это не работает при обработке больших файлов или ответов от LLM. Сетевые чанки могут разрезать один символ или строку JSON пополам. Чтобы правильно обрабатывать байты в разных чанках, необходимо использовать TextDecoderStream и буфер.

  • Отказоустойчивость и повторные попытки ИИ предлагает наивные циклы повторных попыток (retry loops). Такие циклы опасны. Они часто повторяют POST-запросы, что может привести к двойным списаниям средств или дублированию данных. В них также отсутствует механизм backoff и jitter. Это превращает кратковременный сбой сервера в масштабный простой системы. Повторять нужно только идемпотентные запросы, используя экспоненциальный backoff.

  • Различия сред выполнения ИИ путает правила браузера и Node.js. Node.js не применяет CORS. У Node.js другие значения таймаутов по умолчанию. В Node.js необходимо считывать тело ответа (consume the body), чтобы избежать утечки соединений. ИИ не знает вашу целевую среду выполнения, поэтому часто выдает код, который работает в одной среде, но ломается в другой.

Стратегия:

Используйте ИИ для создания каркаса (scaffolding). Пусть он пишет шаблонный код (boilerplate) и базовую структуру.

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

ИИ оптимизирует код под правдоподобность. Вы должны оптимизировать его под корректность.

Источник: https://dev.to/devunionx/new5-things-even-ai-cant-do-fetch-api-328e