前端使用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接收流式数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 跟我学习JScript的Bug与内存管理

    跟我学习JScript的Bug与内存管理

    跟我学习JScript的Bug与内存管理,小编对JScript的Bug与内存管理也不甚了解,所以整理了本篇文章,希望可以解决大家学习时的困扰。
    2015-11-11
  • zepto.js中tap事件阻止冒泡的实现方法

    zepto.js中tap事件阻止冒泡的实现方法

    这篇文章主要介绍了zepto.js中tap事件阻止冒泡的实现方法,实例分析了由冒泡产生的click延迟解决方法,需要的朋友可以参考下
    2015-02-02
  • Bootstrap表单控件使用方法详解

    Bootstrap表单控件使用方法详解

    Bootstrap让Web开发更迅速、更简单,这篇文章主要为大家详细介绍了Bootstrap表单控件,用来与用户做交流的一个网页控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JavaScript关于提高网站性能的几点建议(一)

    JavaScript关于提高网站性能的几点建议(一)

    这篇文章主要介绍了JavaScript关于提高网站性能的几点建议(一)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • javascript-简单的计算器实现步骤分解(附图)

    javascript-简单的计算器实现步骤分解(附图)

    输入内容的判断,对于事件对象的来源的判断以及数学运算“+,-,*,/”的使用,感兴趣的朋友可以学习下
    2013-05-05
  • Echarts基本入门之柱状图、折线图通用配置

    Echarts基本入门之柱状图、折线图通用配置

    现在各种框架各种库都很强大,但是也因为功能强大,导致很多配置都过于繁重,真正有用的就那么几个,这篇文章主要给大家介绍了关于Echarts基本入门之柱状图、折线图通用配置的相关资料,需要的朋友可以参考下
    2021-06-06
  • GoJs连线上的信息展示使用详解

    GoJs连线上的信息展示使用详解

    这篇文章主要为大家介绍了GoJs连线上的信息展示使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • JS中confirm,alert,prompt函数区别分析

    JS中confirm,alert,prompt函数区别分析

    JS中confirm,alert,prompt函数使用区别有哪些呢?
    2011-01-01
  • Javascript blur与click冲突解决办法

    Javascript blur与click冲突解决办法

    这篇文章主要介绍了Javascript blur与click冲突解决办法的相关资料,在开发过程中经常会遇到blur与click 冲突的情况,这里举了几个例子,和解决办法,需要的朋友可以参考下
    2017-01-01
  • 详解JavaScript 新语法之Class 的私有属性与私有方法

    详解JavaScript 新语法之Class 的私有属性与私有方法

    这篇文章主要介绍了JavaScript 新语法之Class 的私有属性与私有方法 ,本文通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04

最新评论