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
}
相关推荐
kyriewen12 分钟前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
谢小飞28 分钟前
大文件上传很难?学会这招,GB文件秒传不是梦
前端·node.js
一壶浊酒..44 分钟前
Scrape Webpack练习
开发语言·javascript·webpack
程序员黑豆1 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
怕浪猫1 小时前
用 TRAE Work 来写这篇关于 TRAE Work 的征文
aigc·agent·ai编程
To_OC1 小时前
别只拿 useRef 绑 DOM 了,搭配 Web Worker 解决页面卡顿才是真的香
前端·react.js·dom
RETURN100ERRORS2 小时前
Agent - 记忆
ai编程
IT_陈寒2 小时前
Vue的响应式让我原地破防,原来问题出在这
前端·人工智能·后端
子兮曰3 小时前
Bun vs Node.js 深度对决:跑分快 4 倍,真实业务只剩 3%,2026 年到底该怎么选?
前端·后端·typescript
计算机魔术师3 小时前
终端用户
前端