AI 在使用 Fetch API 时常犯的 5 个错误
AI 编程助手写的代码看起来是对的。但它们写的代码并不正确。
大多数模型会建议一段简单的 fetch 代码片段。它在演示中运行良好,但在生产环境中会失败。Fetch API 是一个低级工具,而不是一个完整的 HTTP 客户端。它需要你做出 AI 无法做出的架构决策。
以下是 AI 在使用 fetch 时失败的 5 个方面:
错误处理 AI 假设请求失败会导致 Promise 被 reject。这是错误的。404 或 500 错误并不会触发 catch 块。你必须手动检查
response.ok。如果不这样做,你的应用会将错误页面视为成功获取的数据。请求取消 AI 经常忘记使用
AbortController。这在 React 等框架中会导致内存泄漏和竞态条件。如果用户快速点击列表,旧的请求可能会在新的请求之后完成。这会导致你的 UI 显示过时的数据。你还必须过滤AbortError,以免在有意的取消操作期间显示错误消息。流式数据 AI 将响应视为单一的数据块。在处理大文件或 LLM 响应时,这会出问题。网络分块可能会将单个字符或一行 JSON 切成两半。你必须使用
TextDecoderStream和缓冲区(buffer)来正确处理跨分块的字节。韧性与重试 AI 提供的重试循环非常天真。这些循环是危险的。它们经常重试 POST 请求,这可能导致重复扣款或数据重复。它们还缺乏退避机制(backoff)和抖动(jitter)。这会将微小的服务器波动演变成大规模的服务中断。你必须仅重试幂等请求,并使用指数退避算法。
环境差异 AI 混淆了浏览器和 Node.js 的规则。Node.js 不强制执行 CORS。Node.js 有不同的默认超时设置。在 Node 中,你必须消费(consume)响应体以避免连接泄漏。AI 无法预知你的目标运行时环境,因此它经常给出在一种环境下可行但在另一种环境下失效的代码。
应对策略:
使用 AI 来搭建脚手架。让它编写样板代码和基本结构。
你必须掌控语义。你来决定 404 是否算作错误。你来决定重试预算。你来决定如何处理身份验证请求头(auth headers)。
AI 优化的是“看似合理”的代码。你必须优化的是“正确性”。
来源:https://dev.to/devunionx/new5-things-even-ai-cant-do-fetch-api-328e
