如何在 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() 函数中切换 innerHTML
React Native - 当array.length.current == 0或数组变为空时重置setInterval持续时间