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

  • 相关阅读:
    go 学习笔记---chan
    golang学习笔记---Goroutine
    golang ---Learn Concurrency
    golang ----并发 && 并行
    golang 学习笔记 使用cmd
    并发程序与并行程序
    golang学习笔记 ---interface
    golang --- map如何判断key是否存在
    golang学习 ---defer语句
    golang --for语句
  • 原文地址:https://www.cnblogs.com/lisiyang/p/11429906.html
Copyright © 2020-2023  润新知