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

如何让async/await类型的getGas()函数每5秒执行一次以获取最新Gas价格

解决每5秒调用async函数获取Gas价格的问题

我来帮你搞定这个定时调用的问题!你的代码里有几个小逻辑问题导致无法正常工作,我们一步步来修正:

原代码的问题点

  • 你定义的gas是一个async函数,但从来没有调用它,所以根本不会执行任何逻辑
  • setTimeout的回调函数不是async函数,直接在里面用await会报错(await只能在async函数内部使用)
  • setTimeout只会执行一次,你需要的是重复定时执行,它做不到这一点

正确实现方案

根据你的需求,我提供两种常用的实现方式,你可以根据场景选择:

方案1:使用setInterval(简单直接)

适合getGas()执行时间稳定且远小于5秒的场景,固定每5秒触发一次:

async function main() { 
  // 先立即获取一次初始Gas价格
  let gas = await getGas();
  console.log('初始Gas价格:', gas);

  // 每5秒重复调用更新价格
  const intervalId = setInterval(async () => {
    try {
      gas = await getGas();
      console.log('更新后的Gas价格:', gas);
    } catch (err) {
      console.error('获取Gas价格失败:', err);
    }
  }, 5000);

  // 如果之后需要停止定时更新,可以调用 clearInterval(intervalId)
  // 其他业务代码...
}

方案2:递归调用setTimeout(更安全)

如果getGas()可能因为网络等原因耗时较长,这种方式可以确保上一次请求完全完成后,再等待5秒执行下一次,避免出现多个请求重叠的情况:

async function main() { 
  // 定义递归更新函数
  async function updateGasPrice() {
    try {
      const gas = await getGas();
      console.log('当前Gas价格:', gas);
    } catch (err) {
      console.error('获取Gas价格失败:', err);
    } finally {
      // 无论成功失败,5秒后再次执行更新
      setTimeout(updateGasPrice, 5000);
    }
  }

  // 启动定时更新
  await updateGasPrice();

  // 其他业务代码...
}

注意事项

  • 记得给getGas()加上错误捕获,避免单次请求失败导致整个定时逻辑中断
  • 如果需要停止定时任务,方案1要保存setInterval返回的ID,调用clearInterval(intervalId);方案2可以加一个开关变量控制是否继续递归

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:22:35