vue实现类GhatGPT逐字输出效果

最近有一个需求调用openAi 接口,因为返回内容是一次性返回, 避免用户等待时间长。
后端采用流式传输(stream)拿到一个字就传输一个字 。前端需要渲染文本实现打字效果

代码如下

 async getStream2() {
      try {
        let response = await  fetch('/cloud-ai/openai/stream?message=xxx');
        if (!response.ok) {
          throw new Error('Network response was not ok');
        }
        const reader = response.body.getReader();
        const textDecoder = new TextDecoder();
        let result = true;
        let output = ''
        while (result) {
          const { done, value } = await reader.read();
          if (done) {
            console.log('Stream ended');
            result = false;
            break;
          }
          const chunkText = textDecoder.decode(value);
          output += chunkText;
          this.innerText+=chunkText
          console.log('Received chunk:', chunkText);
        }
      } catch (e) {
        console.log(e);
      }
    },

注意:在浏览器端,axios 是使用 XMLHttpRequest 对象来实现请求,设置 responseType: ‘stream’ 后会出现以下警告⚠️:The provided value ‘stream’ is not a valid enum value of type XMLHttpRequestResponseType.所以,在浏览器端,我们需要使用浏览器内置API fetch 来实现 stream 流式请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值