如何在 Js 中重置 setInterval()?

Posted

技术标签:

【中文标题】如何在 Js 中重置 setInterval()?【英文标题】:How to reset the setInterval() in Js? 【发布时间】:2021-05-30 11:47:32 【问题描述】:

我需要在服务器运行时实时更新 ('http://localhost:3000/users')。 我有一个函数 fetchSlots() 在给定的 setInterval 中运行。 如果在数据库中添加或删除任何用户(即在('http://localhost:3000/users')中)。我需要获取新添加的项目并在 fetchSlots() 中使用它。就像我运行以下代码的服务器,它每 30000 毫秒获取详细信息。如果我将用户添加到数据库,在下一个时间间隔内,不会获取新添加的用户详细信息。类似地,如果我在服务器运行时从数据库中删除用户,在下一个删除用户详细信息的时间间隔内也被提取。我是否必须在每 30000 毫秒后重置时间间隔,或者我该如何解决这个问题。

任何帮助!

async function polling() 
    await axios.get('http://localhost:3000/users').then(async response => 
      for (let l = 0; l < response.data.length; l++) 
        slotFound = false;
        const apiCall = setInterval(async () => 
          await fetchSlots(response.data[l].pincode, response.data[l].emailid);
        , 30000);
      
    );
  

【问题讨论】:

【参考方案1】:

回答您的标题问题:“如何在 Js 中重置 setInterval()?” 您可以通过使用 setInterval 返回的内容调用 clearInterval 来停止间隔。

clearInterval(apiCall);

但是按照你在描述中所说的去做,我觉得这会更直接。

async function polling() 
    const response = await axios.get('http://localhost:3000/users');
    for (let data of response.data) 
        slotFound = false;
        await fetchSlots(data.pincode, data.emailid);
    

setInterval(polling, 30000);

【讨论】:

每 30 秒调用一次轮询函数。此功能完成所有必要的工作。剩下的就是你的代码:调用用户路由并为找到的每个用户获取插槽。现在清楚了吗? 对了,为什么不直接一键返回用户和槽呢?由于连接开销,在客户端这样循环是非常低效的。同样的循环可能在服务器上【参考方案2】:

你为什么不在这里使用一个函数?

function bla(t, p) 
  setInterval(async () => 
    console.log(p)
  , t);


bla(3000, "30000")
bla(4000, "40000")

【讨论】:

以上是关于如何在 Js 中重置 setInterval()?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React setState 和 setInterval 循环图像轮播?

js 如何清除setinterval

计数器不断重置为 setInterval 循环上的声明变量

vue js props重置计时器

如何使用 JS 在 setInterval() 函数中切换 innerHTML

React Native - 当array.length.current == 0或数组变为空时重置setInterval持续时间