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

如何优化数据请求函数中的if语句,高效保留原有逻辑?

Hey,我来帮你搞定这个需求!既要实现每5秒自动触发dataRequest,还要优化里面的if语句同时完全保留原有逻辑,对吧?直接上完整的解决方案:

完整实现代码
// 初始化所需变量
let latest = null;
let history = [];

// 模拟你的dataRequest函数(替换成实际的异步数据获取逻辑)
async function dataRequest() {
  // 示例:假设这里是接口请求
  const data = await fetch("/api/data").then(res => res.json());

  // 👇 优化后的条件判断逻辑,完全保留原有业务效果
  const targetItem = data?.item_1;
  if (targetItem) {
    latest = targetItem;
    // 生成新的历史数组(避免直接修改原数组,保持不可变性)
    history = [...history, latest];
  }
}

// 设置定时器:每5秒触发一次数据请求
const requestTimer = setInterval(async () => {
  await dataRequest();
}, 5000);

// 可选:后续需要停止定时任务时调用
// clearInterval(requestTimer);

核心优化点说明

1. 定时触发逻辑

  • 用setInterval实现每5秒自动调用,因为dataRequest是异步函数,所以在定时器回调里加await,确保每次请求完成后再进入下一次计时,避免请求堆积
  • 保存定时器IDrequestTimer,方便后续随时停止定时任务

2. if语句的高效优化

原有逻辑是仅当data.item_1存在时,才更新latest和历史数组,优化后的写法有这些优势:

  • 使用**可选链操作符?.**安全访问嵌套属性,避免data为null/undefined时抛出Cannot read property 'item_1' of null的错误
  • 提前提取targetItem变量,避免重复访问data.item_1,既提升了代码可读性,也减少了不必要的属性访问操作
  • 逻辑和原有完全一致:只有当targetItem为真值时才执行更新操作

如果你的原有if语句是需要严格判断data.item_1不为null或undefined(比如要保留0、''这类假值),可以再结合**空值合并操作符??**进一步精准控制:

const targetItem = data?.item_1 ?? null;
if (targetItem !== null) {
  latest = targetItem;
  history = [...history, latest];
}

这种写法会跳过null和undefined,但保留其他所有值,完美匹配更精细的业务逻辑。

额外建议

如果dataRequest可能出现请求失败的情况,建议在定时器回调里加上错误捕获,避免单个请求失败导致后续所有定时任务中断:

const requestTimer = setInterval(async () => {
  try {
    await dataRequest();
  } catch (err) {
    console.error('数据请求出错啦:', err);
    // 这里可以加错误重试逻辑或者告警逻辑
  }
}, 5000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:22