fetch 请求 stream 流接口并使用 AbortController 中断结果响应
1. 使用fetch请求stream流接口:
封装fetch工具方法 fetchRequest.js
const fetchStream = async (url, options) => { const response = await fetch(url, options); if (response.status !== 200) { return false; } const reader = response.body.getReader(); return reader; }; export default fetchStream;
统一管理api api.js
// 引入封装好的 fetchRequest.js import fetchRequest from "./fetchRequest"; const abortController = new AbortController(); const abortSignal = abortController.signal; // 请求 export function chatApi(data) { return fetchRequest("/api/xxx", { method: "post", headers: { "Content-Type": "application/json", }, signal: abortSignal, body: JSON.stringify(data), }); } // 中断请求方法 export function abortFetch() { abortController.abort(); }
使用封装好的方法进行请求,并处理响应结果
... let params = { message: xxx, }; let reader = await $api.chatApi(params); while (true) { const { value, done } = await reader.read(); if (done) { break; // 读取完毕 } else { console.log("message: ", new TextDecoder().decode(value)); } } ...
2. 使用AbortController中断请求:
AbortController 是一个用于控制一个或多个 AbortSignal 对象的接口,通过调用 AbortController 的 abort 方法,可以中断一个或多个关联的 AbortSignal。
上面的 api.js
中,AbortController 创建了一个与 fetch 请求关联的 AbortSignal,然后将该 AbortSignal 传递给 fetch 的 signal 选项。当需要中断请求时,调用 abortController.abort()
方法即可。
注意fetch请求中设置的 signal: abortSignal
const abortController = new AbortController(); const abortSignal = abortController.signal; function abortFetch() { abortController.abort(); }
// 按自己导出的方式引入并使用中断请求 import {abortFetch} from "./api.js" abortFetch();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码