を発行し、私は私が数をデクリメントし、各秒を放出する(セッションタイムアウトタイプの機能のために)、観察を作成Angular2観察可能スコープは
...私はJavaScriptをスコープが、私は、私はどこかでなければならないと思ってい理解と思いました。私はこの罰金に加入し、データが大きく変化するのを見ることができます。私の問題は、Observer以外のイベントがタイマーを「リセット」することがあることです。ただし、オブザーバ内で使用される値は、このリセットを反映しません。
太い矢印の構文を使用すると、this
が保存されると思いましたが、明らかにどこかに間違っています。
observableは、シングルトンとしてモジュールに注入されるコンストラクタで作成されます。
@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);
}
}
この例では、「timer in observer」は3000で始まり1秒ごとにカウントダウンします。ただし、「リセット中のタイマー」は常に定義されていません。これはObservable以外のコンストラクタに割り当てられているので、私はそれがちょうど3000であると思うと思うので、これは二重に混乱しています。
この例では、常に同じスコープになっていますか?