Javascript 在后台保持间隔运行

Javascript 在后台保持间隔运行,javascript,node.js,reactjs,redux,Javascript,Node.js,Reactjs,Redux,我到处都找不到我问题的答案 长话短说,我有一个web应用程序(MERN stack),我希望不断地从前端(react)向后端(node)定期发出请求,即使在组件卸载或用户关闭页面时也是如此 目前,这是我的代码,如果我在那个特定的页面/路线上,它工作正常。但是如果我关闭页面并返回,它会重置间隔 let updateCycle; // to make sure there is only 1 interval useEffect( () => { if (!updateCycle) upda

我到处都找不到我问题的答案

长话短说,我有一个web应用程序(MERN stack),我希望不断地从前端(react)向后端(node)定期发出请求,即使在组件卸载或用户关闭页面时也是如此

目前,这是我的代码,如果我在那个特定的页面/路线上,它工作正常。但是如果我关闭页面并返回,它会重置间隔

let updateCycle; // to make sure there is only 1 interval
useEffect( () => {
if (!updateCycle)
 updateCycle = setInterval(() => {
     myFunction() // calling the function
     }, 10 * 60 * 1000); // every 10 mins
},[myFunction])

那我该怎么做呢?或者我必须将整个程序移到后端吗?

您需要的是该挂钩的清理功能

基本上,useEffect钩子可以返回一个函数,在清理该钩子时将调用该函数

因此,您的代码现在必须是:

let updateCycle
useEffect(() => {
   updateCycle = setInterval(myFunction, 10 * 60 * 1000) // Set a timer as a side effect
   return () => clearInterval(updateCycle) // Here is the cleanup function: we take down the timer
},[myFunction])
当不再需要副作用时,React将基本上调用cleanup函数

也就是说,它将在componentUnMount时或在重新调用useEffect基函数之前调用它(当myFunction指针更改并导致效果刷新时)

如果您需要始终运行的功能,请将其移动到始终安装的组件!我不建议在组件消失时留下副作用,因为这会在应用程序中造成内存泄漏,并且很难重现bug


顺便说一下,当用户关闭页面时,保持任何类型的代码运行都是不可能的。也许你想错了?

将逻辑向上移动到你的应用程序(它总是挂载的),并传递某种启动/停止回调。你想在页面关闭后发出请求吗?网页不是这样工作的。你能举个例子解释一下吗?因为我要调用的函数将发出一个请求,请求头中包含JWT,该请求将对用户进行身份验证。OP不希望清除该请求。即使在卸载后,它也应该保持活动状态。添加了关于如何以react方式处理它的信息。并且在页面完全关闭后。我想我问错了问题,我会解释一下我的应用程序,以了解我的问题。myFunction()是一个将请求发送到路由(称为/items/update)的操作,该路由将更新数据库中的内容,但该路由有一个基于JWT对用户进行身份验证的中间件。那我该怎么处理呢?我需要更新用户的信息,即使他们不使用该应用程序(其价格跟踪应用程序,即使用户离线,我也需要更新价格)