zoukankan      html  css  js  c++  java
  • 使用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 回调的使用方法。 有问题评论见。。

  • 相关阅读:
    NETCore下IConfiguration和IOptions的用法
    关于将vs项目推到GitHub上遇到的问题
    SQL GROUP BY对多个字段进行分组
    sql if else 语句
    CSS
    CSS
    JS
    22 ~ express ~ 内容评论实现
    css ~ a标签占满父级元素
    21 ~ express ~ 内容详情展示 和 阅读数处理
  • 原文地址:https://www.cnblogs.com/lisiyang/p/11429906.html
Copyright © 2011-2022 走看看