vue中sse响应处理(流式数据处理)

使用fetch请求

export function postStream(data) {
	return fetch('url-请求地址', {
		method: 'post',
		body: JSON.stringfy(data),
		responseType: 'srteam',
		headers: {
			'Content-Type': 'application/json'
		}
	})
}

vue文件中使用

<script>
export default {
	data() {
		return {
			decoder: null,
			isEnd: true
		}
	},
	mounted() {
		// 定义一个utf-8格式的文本解码器	
		this.decoder = new TextDecoder('utf-8')
		this.getStream()
	},
	methods() {
		async getStream() {
			const res = await postStream({
				...(请求参数)
			})
			// 读取响应的原始字节流
			const reader = res.body.getReader()
			while (!this.isEnd) {
				await this.getText(reader) // 处理响应数据
			}
		},
		async getText(reader) {
			return new Promise(async (resolve, reject) => {
			// 读取流中的下一个数据块
			const { value, done: readerDone } = await reader.read()
			this.isEnd = readerDone
			// 将数据块解码为字符串
			let chunk = this.decoder.decode(value, { stream: true });
			if (chunk) {
				console.log(chunk)
				... // 响应数据处理
				// setTimeout(() => resolve(), 100)  可以通过设置定时器调节流显示速度
				resolve()
			} else resolve()
		  })
		}
	}
}
</script>
posted @ 2024-11-26 11:27  总是被使用  阅读(0)  评论(0编辑  收藏  举报