AI应用-消费流式输出

Fetch + ReadableStream

  • 支持 POST 请求和自定义请求头
  • 能处理任意格式的流式数据
js 复制代码
/**
 * 通用流式请求方法 ------ 返回一个异步可迭代对象
 * @param {string} url 请求地址
 * @param {RequestInit} [options] fetch 的配置项(method、headers、body、signal 等)
 * @returns {AsyncGenerator<string, void, unknown>} 异步生成器,每次 yield 一个解码后的文本块
 */
async function* createStreamIterator(url, options = {}) {
  // 1. 发起 fetch 请求
  const response = await fetch(url, options);

  // 2. 检查响应状态(可选但建议)
  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  // 3. 获取 reader 和 decoder
  const reader = response.body.getReader();
  const decoder = new TextDecoder('utf-8', { stream: true });

  // 4. 逐块读取并 yield 解码后的文本
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    yield decoder.decode(value, { stream: true });
  }
}

// 外部调用
// 结合取消(使用 AbortController)
const controller = new AbortController();
const iterator = createStreamIterator('/api/stream', { signal: controller.signal });

// 在需要时取消请求
// controller.abort();

for await (const chunk of iterator) {
  // 处理 chunk
}
相关推荐
许雪里4 小时前
XXL-BOOT v2.1.0 发布:React 全新上线 · 全栈 TypeScript · AI+SKILL 驱动开发
ai编程
海兰4 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
wangruofeng4 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
AI砖家5 小时前
Kimi K3 本地部署全解析:需要什么配置的电脑,到底要花多少钱?
人工智能·ai编程
BigTopOne5 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel6 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
小磊哥er6 小时前
深入解构Claude Code - 第 7 篇 · 连接外面的世界
javascript·ai编程
星核0penstarry6 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
何以解忧,唯有..6 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain