在重定向到单页应用程序中的另一个url后,计划任务仍然有效



我正在使用Key斗篷js来管理我的react SPA中的令牌。当Key斗篷获得令牌时,它将调度一个回调函数:onTokenExpired by setTimeout。如果代码没有从我用来处理身份验证的当前组件导航到另一个路径,那么onTokenExpired函数就会被触发。不过,如果用户已通过身份验证,我希望导航到其他组件。如果我导航到另一个路径,我不会再触发onTokenExpired函数。

这里有一个简单的代码来演示这个问题:

在第页http://localhost:3000/welcome

setTimeout(()=>{
alert('callback function: refreshToken triggered')
},5000);
window.location='/helloWorld';

更改位置后,此警报窗口不会显示。

我知道cb函数首先被推送到堆栈上,然后在webapi中创建一个定时器,当定时器结束时,cb被发送到回调队列,最终被事件循环获取并添加到堆栈中。但我不清楚改变url路径是否会打破这种局面。

毕竟,即使在我离开当前组件后,是否有办法保持计划任务的有效性?

window.location加载整个应用程序,因此我猜在后端计时器被破坏了。要导航到不同的组件,请使用this.props.history.push('/helloWorld'(。这解决了问题。

最新更新