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

  • 相关阅读:
    做好最后的1%
    南海城市大脑二期测试的思考
    职场动物进化手册
    搜索框测试用例
    三月版三一金票需求测试总结
    “魔鬼”隐藏在细节中
    java----jdbcTemplate
    内网隧道与SOCKS代理思路总结
    一些免杀方法测试
    JavaScript 关于闭包、同步、异步问题
  • 原文地址:https://www.cnblogs.com/lisiyang/p/11429906.html
Copyright © 2011-2022 走看看