js(vue axios) 异步get线上json文件数据,拿到已知嵌套对象缺无法直接取属性值

发布于 2022-09-12 14:04:05 字数 1065 浏览 9 评论 0

// 把url生成key
getNetworkText(url) {
  let d = url.split('.')
  let x = d[2].split('/').pop()
  return x
},
// get请求json内容到 this.getNetworkData
getNetwork(url) {
  let lastText = this.getNetworkText(url)
  // debugger
  let requestParams = {}
  const successCallBack = (res) => {
    this.getNetworkData[lastText] = {
      nodes: res.nodes,
      edges: res.edges
    }
    res
    if (res && res.code === 1) {
    }
  }
  const errCallBack = (res) => {}
  this.$get(url, requestParams, successCallBack, errCallBack)
},

// 疑问如下=============================

  this.getNetwork(res.data.Network.network_json)
  // 执行以上函数取到json数据了 下行已经打印
        console.log(this.getNetworkData)
        let a = this.getNetworkText(res.data.Network.network_json)
        // 但是直接取里面的属性 值  就会报错undefined
        // 延时2秒就好了 猜测应该是这里同步执行的缘故
        // 请问一下有更好的办法吗 已经尝试this.$nextTick不行
        setTimeout(() => {
          this.Network.nodes = this.getNetworkData[a].nodes
          this.Network.edges = this.getNetworkData[a].edges
        }, 2000)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轻拂→两袖风尘 2022-09-19 14:04:05

试试

getNetwork(url) {
    ... // 代码片段
  return this.$get(url, requestParams, successCallBack, errCallBack)// 这里return出去,this.$get返回是一个promise
},

// 同步执行,有个疑问,你这个res是哪里来的
  this.getNetwork(res.data.Network.network_json).then(()=>{
        let a = this.getNetworkText(res.data.Network.network_json)
        this.Network.nodes = this.getNetworkData[a].nodes
        this.Network.edges = this.getNetworkData[a].edges
  })
  .catch(()=>{})// 异步处理

按照官方文档的写法的话,你这个其实可以这么写

getNetwork(url) {
  let lastText = this.getNetworkText(url)
  let requestParams = {}
  return this.$get(url, requestParams).then((res)=>{
      this.getNetworkData[lastText] = {
      nodes: res.nodes,
      edges: res.edges
    };
    return this.getNetworkData[lastText]
    }).catch(()=>{
    // 异常处理
    })
},

// 假设你使用的时候是双重请求,这个res是第一层请求得到的,那还可以这么写
// 第一层请求
this.$get(url, requestParams).then(async (res)=>{
  Object.assign(this.Network ,await this.getNetwork(res.data.Network.network_json))
}).catch(()=>{
// 异常处理
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文