前端fetch流式数据接收

功能介绍:
使用 Fetch API 发送请求并通过 ReadableStream 接收流式响应,实现 AI 回答的实时渲染效果。通过 TextDecoder 解码响应流并逐步更新界面。

功能代码:

        // 发送POST请求fetch接口
        let resp = await fetch('接口地址', {
          method: "post",
          // 根据后端要求传对应的headers参数
          headers: {
            "Content-Type": "application/json",
            Authorization: "",  // token
          },
          body: {},  // 传递参数
        });

        // 检查响应状态
        if (!resp.ok) {
          throw new Error("Network response was not ok");
        }

        // 创建流式读取器和文本解码器
        let reader = resp.body.getReader();  // 获取响应体的读取器
        let textDecoder = new TextDecoder();  // 创建文本解码器
        let getdata;  // 用于存储解析后的数据

        // 循环读取流式响应
        while (true) {
          try {
            // 读取数据流
            let { done, value } = await reader.read();
            if (done) break;  // 如果读取完成则退出循环

            // 解码二进制数据为文本
            let str = textDecoder.decode(value);

            getdata = JSON.parse(str);

            // 如果返回内容有效且不是结束标志,则更新最新内容
            if (getdata.content && getdata.content !== "over") {
                this.getData = getdata.content;
            }
          } catch (error) {
            // 捕获并记录流读取错误
            console.error("Stream reading error:", error);
            break;
          }
        }

        // 处理完整的响应数据
        if (getdata && getdata.messag) {
          this.$emit("end"); // 请求结束
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值