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

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

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

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

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

Axios 無法使用stream來直接處理真正的流式響應(yīng)(但 Node.js 中可以使用 stream),這與瀏覽器底層 HTTP 請求實現(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)
              // 實時輸出
              console.log(data.message.content)
            } catch (err) {
              console.error('解析錯誤:', err)
            }
          }
        }
      }
    }

    fetchStreaming()



  </script>

實現(xiàn)效果

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

總結(jié) 

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

相關(guān)文章

  • Javascript HTML5 Canvas實現(xiàn)的一個畫板

    Javascript HTML5 Canvas實現(xiàn)的一個畫板

    這篇文章主要為大家詳細(xì)介紹了Javascript HTML5 Canvas實現(xiàn)的一個畫板的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • js實現(xiàn)圖片無縫滾動

    js實現(xiàn)圖片無縫滾動

    這篇文章主要介紹了Javascript圖片無縫滾動的相關(guān)內(nèi)容,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 基于JS實現(xiàn)操作成功之后自動跳轉(zhuǎn)頁面

    基于JS實現(xiàn)操作成功之后自動跳轉(zhuǎn)頁面

    這篇文章主要介紹了基于JS實現(xiàn)操作成功之后自動跳轉(zhuǎn)頁面的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件

    arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件

    這篇文章主要介紹了arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JS獲取本機(jī)IP地址的2種方法

    JS獲取本機(jī)IP地址的2種方法

    我們在項目經(jīng)常遇到獲取本機(jī)IP地址的需求,下面這篇文章主要給大家介紹了關(guān)于JS獲取本機(jī)IP地址的2種方法,文中通過示例代碼介紹的非常詳細(xì),本文適合新手,需要的朋友可以參考下
    2022-09-09
  • 細(xì)說webpack源碼之compile流程-rules參數(shù)處理技巧(1)

    細(xì)說webpack源碼之compile流程-rules參數(shù)處理技巧(1)

    webpack作為一種流行的打包工具被廣泛應(yīng)用在web項目的前端工程化構(gòu)建中。下面通過本文給大家介紹webpack源碼之compile流程-rules參數(shù)處理技巧,感興趣的朋友一起看看吧
    2017-12-12
  • IE6下JS動態(tài)設(shè)置圖片src地址問題

    IE6下JS動態(tài)設(shè)置圖片src地址問題

    解決IE6下JS動態(tài)設(shè)置圖片IMG的SRC時圖片無法加載錯誤的方法
    2010-01-01
  • javascript實現(xiàn)帶節(jié)日和農(nóng)歷的日歷特效

    javascript實現(xiàn)帶節(jié)日和農(nóng)歷的日歷特效

    這篇文章主要介紹了javascript實現(xiàn)帶節(jié)日和農(nóng)歷的日歷特效,效果十分棒,需要的朋友可以參考下
    2015-02-02
  • js canvas仿支付寶芝麻信用分儀表盤

    js canvas仿支付寶芝麻信用分儀表盤

    這篇文章主要為大家詳細(xì)介紹了js canvas仿支付寶芝麻信用分儀表盤,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 詳解小程序原生使用ES7 async/await語法

    詳解小程序原生使用ES7 async/await語法

    這篇文章主要介紹了詳解小程序原生使用ES7 async/await語法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論

富阳市| 富宁县| 泸定县| 崇义县| 万源市| 白水县| 祁门县| 集安市| 鹰潭市| 葫芦岛市| 桃源县| 包头市| 石楼县| 杂多县| 卢湾区| 望都县| 九寨沟县| 井研县| 黔西县| 即墨市| 昌黎县| 龙川县| 乌兰浩特市| 盖州市| 江孜县| 安徽省| 贡嘎县| 嘉定区| 揭西县| 手游| 库车县| 白城市| 张家川| 吉林省| 英山县| 尤溪县| 甘洛县| 永登县| 石棉县| 武威市| 北碚区|