求助大佬,浏览器怎么实现定时执行?

新手上路,请多包涵

需求是登录之后会有一个token过期时间,到了时间立刻弹框重定向到登录页,不能等到请求接口返回403再弹框,这个应该怎么实现呢?
setinterval 被说会有性能问题,真的会很占用资源吗

回复
阅读 1.1k
3 个回答
  1. 浏览器 setTimeoutsetInterval 都没有那么准。另外如果网页被切入后台,这两个计时器都会被停掉,直到被唤醒。
  2. 另外所有权限控制都不可能只由前端来做,后端肯定要参与
  3. 所以一般不建议前端完成上述功能,更合适的是后端每次都校验 token,过期了就 403,前端捕获到错误再跳转
  4. 这里用 setInterval 不会有什么性能问题,除非你代码有问题。注意全局统一管理,不要反复注册多次就行了。

不管是setTimeout还是setInterval,都无法精准做到你说的效果,
很容易出现,距离失效还有1ms,发起请求了,接口请求返回403了.

建议你在每次发起请求前,检查token失效时间,快到时间了(比如,5s,10s之类的),就弹窗重新定向到登录页.

function checkTokenExp() {
// 假设你已经从服务器获取了 token 的过期时间,并存储在变量 tokenExpDate 中
var currentTime = new Date();
if (currentTime >= tokenExpDate {

if (confirm("你的登录已经过期,是否重新登录?")) {
  // 使用 replace 不会留下历史记录
  window.location.replace("/login");
}

}
}

// 每隔 5 分钟检查一次 token 的过期时间
setInterval(checkTokenExp, 5 60 1000);

这种方式是轮询检测设置长点不存在性能问题,还可以点击按钮提示并跳转(看你们公司的业务),时间也可以存到sessionStorage里面
先别管后台该怎么做,先把自己的活儿干好就行。

推荐问题
宣传栏