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
}
相关推荐
v:ychya20186 分钟前
独立站外贸建站公司怎么选?建站就要建营销型网站
前端·php
threerocks6 分钟前
用 Muse 薅 Claude Team 免费 1 年教程
aigc·openai·ai编程
春涧草茶9 分钟前
慢就是快12-12手动抛出异常
java·linux·前端
三小河25 分钟前
从 Markdown 到 Generative UI:AI 如何从“生成答案”进化到“生成界面”?
前端·人工智能·后端
请为小H留灯30 分钟前
Windows 本地前端项目一键运行指南:Volta+Node+pnpm + 阿里镜像完整初始化流程
前端·pnpm·node·js
J船长1 小时前
从 App 开发到 Unity 游戏开发:建立认知地图,结合 AI 开始实践
前端
VIP_CQCRE1 小时前
Visual Studio 接入 AI 助手:LMLocal × Ace Data Cloud 配置指南
大模型·api·ai编程·visual studio·acedatacloud
Highcharts.js1 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表
牛奔1 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang