[英]Angular2 Observable scoping issues
我以為我了解javascript范圍定義,但我想我必須離開某個地方...
我創建了一個可觀察的對象(用於會話超時類型功能),該對象會遞減一個數字並每秒發出一次。 我可以同意這一點,並看到數據變化很大。 我的問題是,有時觀察者之外的事件會“重置”計時器; 但是,觀察者內部使用的值不反映此重置。
我原以為使用脂肪箭頭語法this
將被保留,但顯然我是不正確的地方。
可觀察對象是在構造函數中創建的,該構造函數作為單例注入到模塊中。
@Injectable()
export class TimeoutService {
private _internalTimer: number;
private _logoutThreshold: number;
private _timer$: Observable<number>;
constructor(@Inject(DOCUMENT) private document: any) {
this._logoutThreshold = 3000;
document.onkeypress = this.resetTimer;
this._internalTimer = this._logoutThreshold;
this._timer$ = new Observable(observer => {
observer.next(this._internalTimer)
setInterval(() => {
this._internalTimer--;
console.log("timer in observer", this._internalTimer);
observer.next(this._internalTimer);
}, 1000);
});
}
resetTimer() {
this._internalTimer = this._logoutThreshold;
console.log("timer in reset", this._internalTimer);
}
}
在此示例中,“觀察者中的計時器”的效果很好,從3000開始並每秒倒數。 但是,“復位定時器”始終未定義。 這使我倍加困惑,因為在最奇怪的情況下,由於我在Observable之外的構造函數中分配了它,因此它只是一個常數3000。
在本示例中,如何確保自己始終處於同一范圍內?
哈哈,按照正常情況,在發布問題后幾分鍾內,我就解決了。 原來我確實正確理解了粗箭頭的作用域,只是沒有在文檔偵聽器上使用它。
改變中
document.onkeypress = this.resetTimer;
至
document.onkeypress = e => this.resetTimer();
使一切正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.