在使用 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 回調的使用方法。 有問題評論見。。