前端使用fetch接收流式数据处理实例demo

 更新时间:2025年02月27日 08:27:17   作者:xiaoliyo_  
这篇文章主要介绍了前端使用fetch接收流式数据处理的相关资料,文中描述了一个流式数据处理的demo,需要后端服务配合进行接口调试,需要的朋友可以参考下

流式数据

流式数据是指以连续的方式产生和传输的数据,这类数据通常在实时或接近实时的情况下进行处理

代码部分

这是我测试用的demo,需要后端配合起来一个服务,进行接口调试,下面我把整个demo打包出来

 async getText() {
      const decoder = new TextDecoder("utf-8")
      try {
        const test = "1"
        const stream = await getAiText(test) // 获取流
        const reader = stream.getReader() // 获取流的读取器

        // 读取流数据的函数
        const read = async () => {
          const { done, value } = await reader.read() // 读取下一个数据块
          if (done) {
            console.log("Stream complete")
            return
          }
          const chunk = decoder.decode(value, { stream: true })
          console.log(chunk)//查看数据输出
          setTimeout(() => {
            this.text += chunk // 更新 text
          }, 200)
          read() // 继续读取下一个数据块
        }

        read() // 开始读取流数据
      } catch (error) {
        console.error("Error fetching AI text:", error)
      }
    },

demo,压缩包整不了,看代码吧

//我这里做了个跨域,vite.config.js
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue(),

    ],
    server: {
        host: "0.0.0.0",
        proxy: {
            '/stream3': {
                target: 'xxxxxxxxxxx', // 目标服务器地址
                changeOrigin: true, // 允许跨域
                rewrite: (path) => path.replace(/^\/api/, '') // 去掉请求路径中的/api前缀
            },
        }
    },
})

//封装导出请求方法
export const getAiText = async (text) => {
    const response = await fetch('/stream3', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({ test: text }),
    })
    return response.body // 返回 ReadableStream
}
//组件页面引入
<template>
  <div class='HelloWorld_wrap'>
    <h1 @click="getText()">点击</h1>
    {{text}}
  </div>
</template>
<script >
import { getAiText } from "../http/testAi"
import {
  defineComponent,
  ref,
  onMounted,
  onUpdated,
  toRefs,
  reactive,
} from "vue"
export default defineComponent({
  name: "HelloWorld",
  props: {},
  data() {
    return {
      text: "",
    }
  },
  methods: {
    async getText() {
      const decoder = new TextDecoder("utf-8")
      try {
        const test = "1"
        const stream = await getAiText(test) // 获取流
        const reader = stream.getReader() // 获取流的读取器

        // 读取流数据的函数
        const read = async () => {
          const { done, value } = await reader.read() // 读取下一个数据块
          if (done) {
            console.log("Stream complete")
            return
          }
          const chunk = decoder.decode(value, { stream: true })
          console.log(chunk)//查看数据输出
          setTimeout(() => {
            this.text += chunk // 更新 text
          }, 200)
          read() // 继续读取下一个数据块
        }

        read() // 开始读取流数据
      } catch (error) {
        console.error("Error fetching AI text:", error)
      }
    },
  },
  mounted() { },
});
</script>
<style lang="scss" scoped>
</style>
//最后app.vue引入
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <HelloWorld />
</template>

总结 

到此这篇关于前端使用fetch接收流式数据处理的文章就介绍到这了,更多相关前端fetch接收流式数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 学习JSON.stringify的9大特性和转换规则

    学习JSON.stringify的9大特性和转换规则

    本文介绍JSON.stringify9大特性和转换规则,JSON.stringify()方法将一个JavaScript对象或值转换为 JSON 字符串,如果指定了一个replacer 函数,则可以选择性地替换值,或者指定的replacer是数组,则可选择性地仅包含数组指定的属性,更多内容需要的小火煸可以参考下面温行内容
    2022-02-02
  • JavaScript实现Tab标签页切换的最简便方式(4种)

    JavaScript实现Tab标签页切换的最简便方式(4种)

    这篇文章主要介绍了JavaScript实现Tab标签页切换的最简便方式(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Javascript 不能释放内存.

    Javascript 不能释放内存.

    Javascript 不能释放内存....
    2006-09-09
  • Bootstrap每天必学之进度条

    Bootstrap每天必学之进度条

    Bootstrap每天必学之进度条,对Bootstrap进度条小编也了解的很少,希望通过这篇文章和大家更多的去学习Bootstrap进度条,从中得到收获。
    2015-11-11
  • js绘制一条直线并旋转45度

    js绘制一条直线并旋转45度

    这篇文章主要为大家详细介绍了js绘制一条直线并旋转45度,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • CSS常用网站布局实例

    CSS常用网站布局实例

    PS:这里列出的是常用的例子,而非研究之用,对一每个盒子,都没有设置margin,padding,boeder等属性!
    2008-04-04
  • layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法

    layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法

    今天小编就为大家分享一篇layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js鼠标按键事件和键盘按键事件用法实例汇总

    js鼠标按键事件和键盘按键事件用法实例汇总

    这篇文章主要介绍了js鼠标按键事件和键盘按键事件用法,结合实例形式总结分析了JavaScript针对鼠标与键盘事件的常用操作技巧,需要的朋友可以参考下
    2016-10-10
  • JS实现CheckBox复选框全选全不选功能

    JS实现CheckBox复选框全选全不选功能

    在网站的管理后台应用此功能居多,如一次性处理多个产品,或对文章的删除对产品的下架等处理,一条一条的点显然有一些麻烦,如果能每一行放一个checkbox,然后统一处理就好办的多了,今天我就用简单的篇幅来讲解一下这个功能的实现原理和实现过程。
    2015-05-05
  • javascript实现点击小图显示大图

    javascript实现点击小图显示大图

    这篇文章主要为大家详细介绍了javascript实现点击小图显示大图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论