订阅功能未执行

时间:2017-08-02 13:22:15

标签: angular session typescript

我是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();
        }
   });
}

0 个答案:

没有答案