我是Angular 2的新手(来自更多jQuery承诺背景 - 您可以在其中调用API,然后在结果上执行其他操作。
我的应用程序中有一些功能可以提醒用户,如果会话在20分钟内处于非活动状态,会话将会过期 - 它会弹出一个弹出窗口,允许他们将会话刷新回20分钟或退出。
我的sessionService中的我的Angular方法如下:
public startSession(): void {
//dont call session method for localhost:3000
if (!this.environmentService.isLocalDevEnvironment()) {
console.log("Calling refresh session API");
this.refreshServerSession().subscribe(() => {
let timeoutId = setTimeout(() => {
this.setValue(true);
console.log("Setting session timeout to: " + this.sessionTime);
}, this.sessionTime);
},
(error) => { console.log('Error starting session') });
}
}
public refreshServerSession() {
let sessionKeepAliveUrl = this.environmentService.sessionKeepAliveUrl;
let baseUrl = sessionKeepAliveUrl + AppSettings.URL_SESSION_KEEPALIVE_ENDPOINT;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this.http.post(baseUrl, { headers })
.catch(this.handleError);
}
在我的组件ngOnInit中,我调用this.sessionService.startSession();
,这意味着当用户在站点中移动时,会话计时器应该重置为20分钟,因为它们在站点上处于活动状态。
refreshServerSession方法是一个简单的post调用,用于返回在会话中设置的UserId。
虽然它没有像我期望的那样工作。在控制台中,我希望看到“调用刷新会话API”文本,然后是“启动会话超时”。但是我没有看到记录的代码,直到用于提醒用户会话将结束的模式弹出。我在订阅时做错了。我认为当API帖子返回时,应该执行refreshServerSession中的函数吗?
更多代码
这是我的sessionService中的EventEmitter
@Output() public myOverlay: EventEmitter<any> = new EventEmitter();
这是sessionService中的setValue函数,它在setTimeout中的startSession中使用
public setValue(isLoading: boolean): void {
this.myOverlay.emit(isLoading);
}
这是弹出警报用户会话的模态组件的ngOnInit代码将结束
public ngOnInit(): void {
this._sessionSvc.myOverlay.subscribe((status: boolean) => {
this.visible = status;
if (this.visible === true) {
this.initiateRemainingTimer();
}
});
}