# streamMixin
# 功能说明
提供 SSE (Server-Sent Events) 数据解析和中断功能,支持以下特性:
- 支持 SSE 数据流解析和处理
- 提供完整的生命周期事件
- 支持流式请求的中断控制
- 自动处理流数据状态
- 错误处理机制
- 支持自定义转换流
- 支持非组件场景的工具函数版本
# 导入和使用
import { streamMixin } from 'vue-element-ui-x';
export default {
mixins: [streamMixin],
// ...
};
说明
以下示例的导入方式是解决文档站打包时的报错,正常情况下请按正常的方式导入即可
# 使用示例
# SSE 流式数据示例
展示如何处理 SSE 流式数据,并在 Bubble 组件中展示 Markdown 内容。
复制代码
# SIP 协议数据处理示例
展示如何处理 SIP 协议的流式数据,并使用自定义转换流。
复制代码
# 混入属性
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
streamData | 流数据数组 | Array | [] |
streamError | 流错误信息 | Error | null |
streamLoading | 流处理状态 | Boolean | false |
# 混入方法
方法名 | 说明 | 参数 | 返回值 |
---|---|---|---|
startStream | 启动流式请求 | options: { readableStream, transformStream } | Promise |
cancelStream | 中断流式请求 | - | - |
resetStream | 重置流状态 | - | - |
createStreamProcessor | 创建流处理器的便捷方法 | readableStream, transformStream | Object |
# 事件
事件名 | 说明 | 回调参数 |
---|---|---|
stream-data | 收到新数据时触发 | item: 流数据项 |
stream-complete | 流完成时触发 | data: 所有流数据 |
stream-error | 流错误时触发 | error: 错误对象 |
stream-finish | 流处理结束时触发 | - |
stream-cancel | 流被中断时触发 | - |
# 工具函数版本
对于非组件场景,提供了工具函数版本:
import { createStreamUtils } from 'vue-element-ui-x';
// 创建流处理工具
const streamUtils = createStreamUtils({
onData: item => console.log('数据:', item),
onComplete: allData => console.log('完成:', allData.length, '条数据'),
onError: error => console.error('错误:', error),
onCancel: () => console.log('已取消'),
onFinish: () => console.log('处理结束'),
});
// 使用工具处理流数据
async function processStreamData() {
const response = await fetch('/api/stream');
await streamUtils.startStream({ readableStream: response.body });
}
// 取消处理
function cancelProcessing() {
streamUtils.cancel();
}
// 获取当前状态
function getStatus() {
return {
isLoading: streamUtils.state.loading,
hasError: !!streamUtils.state.error,
dataCount: streamUtils.state.data.length,
};
}
# 注意事项
- 该混入依赖现代浏览器的 Streams API,使用前请确保浏览器支持。
- 流处理过程中产生的错误会通过
streamError
属性和stream-error
事件提供。 - 在组件销毁时会自动清理相关资源。
- 自定义转换流需要实现
transform
和可选的flush
方法。 - 对于大量数据的流处理,建议实现节流或批处理以提高性能。