2017-04-24 5 views
1

私はtypescriptで自動保存を作成しようとしています。目標はユーザーが何かを入力して10秒ごとに自動的に保存することで、ページクラッシュや誤って閉じてもユーザーが入力した内容を失うことはありません。 ページのロードが完了したらすぐに自動保存プロセスを開始したいと思います。非同期自動保存角2でtypescript

私はこのような何かを書かれている:

ngAfterViewInit() { 
    this.autoSaveContent(); 
} 

private autoSaveContent() { 
    while (true) { 
     if (this.isSaving == false && this.hasContentChanged() == true) { 
      this.content.status = 1; 
      setTimeout(this.saveContent(), 10000) 
     } 
    } 

} 

はどのようにして非同期にコードを実行するのですか?なぜなら、このプロセスは、ページが開かれたときに絶えず実行されるからです。このようにして、コンテンツはいつでも保存することができます。

答えて

0

上記は機能するはずです!私が見ることができる問題だけです、それを呼び出すのではなく、setTimeoutメソッドで関数参照を渡す必要があります。

setTimeout(this.saveContent.bind(this), 10000) 

OR

setTimeout(() => { this.saveContent() }, 10000) 
1

たsetInterval()の変更のために10秒ごとにチェックする必要があります...このような何かを...

ngAfterViewInit() { 
    this.autoSaveContent(); 
} 

private autoSaveContent() { 
    var that = this; 
    setInterval(function() { 
     if (that.isSaving == false && that.hasContentChanged() == true) { 
      that.saveContent(); 
     } 
    }, 10000); 
} 

をES6のために、あなたが脂肪を使用することができますあなたのクロージャーで「これ」をキャプチャする心配はありません:

private autoSaveContent() { 
    setInterval(() => { 
     if (this.isSaving == false && this.hasContentChanged() == true) { 
      this.saveContent(); 
     } 
    }, 10000); 
} 
0

Observableにタイマーがあることがわかったので、私はタイマーを使って解決しました。

ngAfterViewInit() { 
    this.isPageAlive = true; 
    let timer = Observable.timer(10000, 10000); 
    let subscription = timer.subscribe(x => this.autoSaveContent()); 
} 

private autoSaveContent() { 
    if (this.isSaving == false && this.hasContentChanged() == true) { 
     this.content.status = 1; 
     this.saveContent(); 
    } 

} 
関連する問題