我有一个超时函数,如下所示:
setTimeout(this.logout, 1000);
登录方式:
logout() {
this.auth_token = "";
this.loggedIn = false;
this.emitLogedInStatusChange();
}
isLoggedIn() {
return this.loggedIn;
}
private emitLogedInStatusChange() {
this.LoggedInStatusChangedEmitter.emit({
value: this.loggedIn
});
}
其中事件发射器告诉主要组件 loggedIn 的值在哪里更改。
问题是 this.emitLogedInStatusChange();
我收到一条错误消息:
this.emitLogedInStatusChange is not a function
我的问题是如何在注销中正确调用此函数以便 setTimeout 可以工作?
这里是我的称呼:
map((res) => {
if (res.username === username) {
this.auth_token = res.access_token;
this.sessionId = res.SessionID;
this.loggedIn = true;
this.expires = res.expires_in;
setTimeout(this.logout, this.expires*1000);
this.emitLogedInStatusChange();
}
最佳答案
当传递函数和方法时,总是需要注意它如何影响 this
的范围。默认情况下,JS 使用调用者的范围。
有一些方法可以明确指定要使用的范围:
setTimeout(this.logout.bind(this), 1000);
但我不能确定,因为您的代码没有显示调用代码的位置。
或者
setTimeout(() => this.logout(), 1000);
可以使用,但这似乎不太简洁。对于将参数传递给回调的其他用例,它们需要像这样重复
someFunction((a, b, c) => this.logout(a, b, c), 1000);
关于javascript - setTimeout() 无法正确调用嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994442/