我在 15 分钟空闲会话后实现注销,而不使用第 3 方库或 ngrx。我创建了一个服务:
run(){
window.onload = () => {this.startTimer()};
window.onmousemove = () => {this.resetTimer()};
}
startTimer(){
let ticks = Observable.timer(0, 1000);
return ticks
}
resetTimer(){
// code here
}
sessionTimeOut(){
// logic to logout
this.resetTimer().subscribe(val =>{console.log(val)}
}
Run Code Online (Sandbox Code Playgroud)
我使用一些函数创建了一些rxjs方法,到目前为止,它们都不起作用,是否可以获得有关resetTimer()方法的帮助?谢谢。
您可以使用switchMapmousemove 事件来重新启动计时器,此路线无需跟上计时器值,只需插入 15000 即可设置并忘记。
const newTimer = () => Rx.Observable.timer(3000);
const mouseMove = Rx.Observable.fromEvent(document, 'mousemove')
.startWith("loaded")
.throttleTime(250);
const logOut = mouseMove.switchMapTo(newTimer());
logOut.subscribe(() => console.log('logout'));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.min.js"></script>
move mouse around here to not log outRun Code Online (Sandbox Code Playgroud)
从下面请求发出的注释中,我假设每秒都会发出一次,并且值重置为mousemove。
const mouseMove = Rx.Observable.fromEvent(document, 'mousemove')
.startWith("loaded")
.throttleTime(250)
.do(() => console.log("restart timer"));
const newTimer = () => {
console.log("starting timer");
return Rx.Observable.timer(0, 1000);
};
const timer = mouseMove.switchMapTo(newTimer());
timer.subscribe(v => console.log(v));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.min.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8800 次 |
| 最近记录: |