使用fetch 遇到的ReadableStream is locked 的问题

mac2022-06-30  37

在使用 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 回调的使用方法。 有问题评论见。。

 

转载于:https://www.cnblogs.com/lisiyang/p/11429906.html

最新回复(0)