我正在使用Keycloak-js在我的react SPA中管理令牌。当Keycloak获得令牌时,它将调度一个回调函数: onTokenExpired by setTimeout。如果代码没有导航到我用来处理身份验证的当前组件的另一个路径,则触发onTokenExpired函数。然而,我想导航到其他组件,如果用户已通过身份验证。如果我导航到另一个路径,我看不到onTokenExpired函数会被触发。
下面是一个简单的代码来演示这个问题:
在http://localhost:3000/welcome页上
setTimeout(()=>{
alert('callback function: refreshToken triggered')
},5000);
window.location='/helloWorld';
更改位置后,此警报窗口不显示。
我知道cb函数首先被推送到栈上,然后在webapi中创建一个计时器,当计时器结束时,cb被发送到回调队列,最终被事件循环拾取并添加到栈中。但我不清楚更改url路径是否会破坏这一点。
毕竟,有没有一种方法可以使计划的任务在我离开当前组件后仍然有效?
发布于 2021-03-27 02:04:17
window.location加载整个应用程序,因此我猜在后端计时器会被销毁。要导航到不同的组件,请使用this.props.history.push('/helloWorld')。这就解决了问题。
https://stackoverflow.com/questions/66790680
复制相似问题