最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何解決前端JavaScript處理流式響應(yīng)的坑

 更新時間:2025年06月27日 11:27:01   作者:小周同學(xué):  
axios是一個支持node端和瀏覽器端的易用、簡潔且高效的http庫,這篇文章主要介紹了如何解決前端JavaScript處理流式響應(yīng)的坑,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

給使用 JavaScript 的同學(xué)提個醒!

瀏覽器端處理流式響應(yīng),想要完美體驗(yàn) 請使用 Fetch API。

Axios 無法使用stream來直接處理真正的流式響應(yīng)(但 Node.js 中可以使用 stream),這與瀏覽器底層 HTTP 請求實(shí)現(xiàn)的限制有關(guān)。

為什么瀏覽器中的 Axios 不能直接處理流?

1. 底層機(jī)制差異

  • Node.js 環(huán)境:Axios 使用 Node.js 的 http 模塊,天然支持流式傳輸(responseType:
    ‘stream’),數(shù)據(jù)可以逐塊(chunk)接收。
  • 瀏覽器環(huán)境:瀏覽器端 Axios 基于 XMLHttpRequest,而 XMLHttpRequest 的 responseType
    屬性不允許設(shè)為 stream,合法值僅有: arraybuffer | blob | document | json | text。

即使服務(wù)端返回流式響應(yīng)(如 text/event-stream 或分塊數(shù)據(jù)),瀏覽器也無法通過 Axios 直接以流的形式逐塊解析數(shù)據(jù)。Axios 在瀏覽器中只能一次性接收完整響應(yīng),再通過字符串或文本處理模擬“流式效果”。

2. 如果必須使用 Axios

  • 可以通過更改 responseType: ‘text’ 和 手動分塊處理 模擬流式效果,但存在以下問題:
    數(shù)據(jù)完整性風(fēng)險:依賴服務(wù)端分塊的準(zhǔn)確性,需維護(hù)緩沖區(qū)(buffer)處理不完整數(shù)據(jù)。 性能損失:需手動分割字符串,效率低于原生流式處理。
  <script>
    // fetch 請求,stream 流式響應(yīng)
    async function fetchStreaming () {
      const response = await fetch('http://192.168.21.24:11434/api/chat', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        // 請求傳遞給 ollama 數(shù)據(jù)
        body: JSON.stringify({
          model: 'deepseek-r1:32b',
          messages: [
            { "role": "user", "content": "北京天安門看升旗儀式怎么預(yù)約?" }
          ]
        })
      })

      if (!response.body) {
        throw new Error('Response body is null')
      }
      // 讀取數(shù)據(jù)流
      const reader = response.body.getReader()
      // 文本解碼器
      const decoder = new TextDecoder()
      let buffer = ''

      while (true) {
        const { done, value } = await reader.read()
        if (done) break

        buffer += decoder.decode(value, { stream: true })
        const lines = buffer.split('\n')
        buffer = lines.pop() || ''

        for (const line of lines) {
          if (line.trim()) {
            try {
              const data = JSON.parse(line)
              // 實(shí)時輸出
              console.log(data.message.content)
            } catch (err) {
              console.error('解析錯誤:', err)
            }
          }
        }
      }
    }

    fetchStreaming()



  </script>

實(shí)現(xiàn)效果

(處理成這樣之后需要前端來優(yōu)化下界面樣式區(qū)分思考過程和答案)

總結(jié) 

到此這篇關(guān)于如何解決前端JavaScript處理流式響應(yīng)坑的文章就介紹到這了,更多相關(guān)JS處理流式響應(yīng)坑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

扎鲁特旗| 太康县| 新龙县| 湖南省| 旅游| 赤城县| 滨海县| 秭归县| 六枝特区| 贡山| 衢州市| 莲花县| 沅陵县| 泰州市| 正定县| 论坛| 黄陵县| 晋州市| 潼南县| 揭西县| 依兰县| 峨山| 京山县| 棋牌| 德州市| 聂拉木县| 武夷山市| 满洲里市| 灵台县| 株洲县| 冀州市| 济南市| 买车| 扶绥县| 定州市| 广昌县| 彭水| 日照市| 蓝田县| 海淀区| 天气|