2017-09-23 19 views
0

私は非常に頻繁にイベントを公開するJavaScriptクラスを用意しています。コードは次のようになります。setTimeout関数のクラス変数へのアクセス

class TimerService { 
    constructor(BroadcastService) { 
    this.Broadcast = BroadcastService; 
    this.timeout; 
    this.warningTimer; 
    this.startTimer(); 
    } 

    startTimer() { 
    clearTimeout(this.timeout); 
    clearTimeout(this.warningTimer); 
    this.timeout = setTimeout(this.startWarning, 30000); 
    } 

    startWarning() { 
    this.Broadcast.send("timeout-warning"); 
    this.warningTimer = setTimeout(this.logout, 60000); 
    } 

    logout() { 
    this.Broadcast.send("session-expired"); 
    } 
} 

export default { service: TimerService, name: "TimerService" }; 

問題は、私はthis.Broadcastにアクセスすることはできませんよ、のsetTimeoutのcalllback機能では、windowthisスコープポイントです。これを構造化する最良の方法は何ですか?私は必要なすべてにアクセスできますか?

答えて

2

これらの2つの方法を使用できます。私は、あなた自身が自分自身の文脈とは関係がなく、より好ましいアプローチであれば、まず最善の策だと思います。

1)Arrow function - this.timeout = setTimeout(() => this.startWarning(), 30000);

2)Explicit Context binding - this.timeout = setTimeout(this.startWarning.bind(this), 30000);

関連する問題