You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

if else逻辑异常排查:数据发送端连接状态判断错误

问题排查:数据连接状态判断异常

需求与问题现象

需求为判断数据发送端与数据表的连接状态:当收到新数据(新请求的id与上次存储的id不同)时标记为connected,无新数据时标记为disconnected。但实际运行时,无新数据(两次id相同)的场景下,控制台却显示connected状态,与预期不符。

实现代码

<script>
export default {
  data() {
    return {
      search: '',
      tag_id: ['bts_d02c2b7d9098aaa2', 'bts_c077ffaa9098aaa2'],
      headers: [
        {
          text: 'Tags',
          align: 'start',
          sortable: false,
          value: 'name',
        },
        { text: 'wifi', value: 'wifi' },
      ],
      val_ia: 0,
      desserts: [],
      id_memory: [],
    }
  },
  mounted() {
    this.CreateTable();
    setInterval(this.getDatafor, 1000)
  },
  methods: {
    CreateTable() {
      for (let i = 0; i < this.tag_id.length; i++) {
        this.desserts.push(
          {
            name: this.tag_id[i],
          },
        )
      }
    },

    async getDatafor() {
      for (let i = 0; i < this.desserts.length; i++) {
        this.val_ia = i;
        await Promise.all([this.getAllData()]);
      }
    },

    async getAllData() {
      const tag_id_name = encodeURIComponent(this.tag_id[this.val_ia]);
      const url = this.$api.getRESTApiUri() + `/all/last_id/${tag_id_name}`;
      return fetch(url)
        .then(res => res.text())
        .then((result) => {
          console.log(tag_id_name)
          console.log(this.id_memory[this.val_ia]);
          console.log(data[0].id)
          const b = this.Test(this.id_memory[this.val_ia], data[0].id);
          console.log(b)
          if(b){
            this.desserts[this.val_ia].wifi = 'connecté'
            console.log('connecté')
          }else{
             this.desserts[this.val_ia].wifi = 'déconnecté'
            console.log('déconnecté')
          }
          this.id_memory[this.val_ia] = data[0].id
        })
        .catch((error) => {
          console.log(error)
        });
    },
    Test(x, y) {
      const a = x !== y
      return a
    },
  }
}
</script>

问题原因分析

  • 接口返回数据未正确解析:getAllData中使用res.text()获取接口返回,但后续直接使用未定义的data变量访问data[0].id。正确做法是将res.text()改为res.json(),并将解析后的结果赋值给data,否则data可能为全局变量或undefined,导致与id_memory中的值比较时出现非预期的true结果。
  • 初始状态未处理:id_memory初始为空数组,第一次请求时this.id_memory[this.val_ia]为undefined,若接口返回的id有值,undefined !== id会返回true,被误判为有新数据,标记为connected。需要在初始化时给id_memory的对应位置设置初始值(如null),或首次请求时直接存储初始id而不进行状态判断。
  • 变量竞态风险:val_ia作为实例变量被用于循环中的异步操作,虽然当前逻辑中使用await避免了大部分问题,但仍存在被其他操作意外修改的可能,建议改为将索引作为参数传递给getAllData,避免依赖实例变量。

内容的提问来源于stack exchange,提问作者Guts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:25:37