web-dev-qa-db-ja.com

Angular2:setTimeoutは一度だけ呼び出されます

setTimeoutの使用を必要とする機能をAngular2に実装しています。

私のコード:

  public ngAfterViewInit(): void {
    this.authenticate_loop();
  }

  private authenticate_loop() {
    setTimeout (() => {
      console.log("Hello from setTimeout");
    }, 500)
  }

setTimeoutngAfterViewInitによって開始されますが、ループは1回だけ実行されます。 「Hello fromsetTimeout」は一度だけ出力されます。

質問: setTimeoutが機能するようにコードを変更するにはどうすればよいですか?

6
Vingtoft
 private authenticate_loop() {
    setInterval (() => {
      console.log("Hello from setInterval");
    }, 500)
 }

setTimeoutは、別のsetTimeoutを作成しない限り、一度だけ実行されます。

11
dlcardozo

編集:したがって、異なるangularバージョン:

Angular2では、$ timeout/$ intervalを使用する必要はありません。したがって、ここでの質問ではsetIntervalが正しい解決策です。

元の応答(Angular1を対象とする)に関心のある方は、以下をお読みください。

Angular.jsアプリケーション内で $ interval を使用します。

そして、angular.jsアプリケーション内の他の場所でsetTimeoutを使用する場合は、 $ timeout サービスを使用することをお勧めします。

$ timeoutおよび$ intervalには、スコープを維持するという利点がありますsetTimeout/setIntervalでは更新されません。

3
Tobi