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

能否在for循环中使用JS fetch()?气象站传感器数据更新代码优化

重构重复的传感器数据更新代码

重构后的代码

// 定义所有传感器的配置:请求参数和对应的HTML元素ID
const sensorConfigs = [
  { name: 'bme280', r: '1', elementId: 'bme280-1-rt1' },
  { name: 'bme280', r: '2', elementId: 'bme280-1-rt2' },
  { name: 'bme280', r: '3', elementId: 'bme280-1-rt3' },
  { name: 'ds18b20-1', r: '1', elementId: 'ds18b20-1-rt1' }
];

function updateReadings() {
  secondsSinceLastUpdate++; // 修正原代码的自增写法错误

  // 循环遍历所有传感器配置,发起请求
  sensorConfigs.forEach(config => {
    fetch(`reading?name=${config.name}&r=${config.r}`)
      .then(response => response.json())
      .then(data => {
        document.getElementById(config.elementId).innerHTML = data;
        secondsSinceLastUpdate = 0;
      })
      .catch(err => console.error(`获取${config.name}数据失败:`, err)); // 增加错误捕获,方便调试
  });
}

// 修正原代码的函数名拼写错误:updateReading → updateReadings
setInterval(updateReadings, 1000);

关键说明

  • 配置数组统一管理:把每个传感器的请求参数、目标元素ID整合到数组中,后续新增传感器只需在数组里添加一行配置,无需重复复制代码块。
  • 循环替代重复代码:用forEach遍历配置数组,一次性处理所有传感器的请求逻辑,代码更简洁易维护。
  • 修复原代码问题:
    • 原代码中secondsSinceLastUpdate = secondsSinceLastUpdate++;是错误写法,直接使用secondsSinceLastUpdate++即可完成自增。
    • 原定时任务里的函数名拼写错误,修正后才能正常触发每秒更新。
  • 新增错误处理:添加catch捕获请求失败的异常,避免请求出错后无任何提示,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:58