使用fetch 遇到的ReadableStream is locked 的問題


在使用 fetch進行封裝的時候,我遇到一個問題,就是要同時兼容后台返回的數據節后也不一樣的問題

比如有時候是json,有時候是string,有時候是Buffer類型。等等,看代碼

let a = null;
fetch(url).then(
  res=> {
return res.json()
}.catch(
  e=>{
  return res.arrayBuffer()
  }
))

這種情況是這樣的,先去做json的處理。如果不是json 會進入到catch但是這個時候 catch里面的e不是你要的數據,所以在

then回調里面對變量進行了賦值。這下就兼容了兩個數據類型。

要注意的是 一定要把json放在最上面,readablestream可以被任意調用arrayBuffer方法 而不會進入catch方法。如果你還要兼容其他的,可以繼續在catch上面加

此時問題來了,

會遇到函數報 ReadableStream is locked 的錯誤

是因為這個對象可能只能調用一次api就會被lock,解決辦法是 調用他的clone方法 如下

let a = null;
let data = await fetch(url).then(
  res=> {
a = res.clone().arrayBuffer()
return res.clone().json() }.catch(   e=>{   return a   } ))

可能還會有其他的辦法。注意哦。如果你要兼容多種數據類型。catch 回調的使用方法。 有問題評論見。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM