如何在代碼運行時判判定時器的狀態

參考:https://stackoverflow.com/que...this

問題:當前模塊只須要一個定時器。可是若是有多個地方調用getData()會出現多個定時器code

private timer = null;
  private setTimer() {
      this.timer = setTimeout(function () {
        this.getData();
      }.bind(this), 5000);
  }

  getData() {
    http.get('getxxxData', () => {
      //....
      this.setTimer();
    });
  }

解決方法:在啓動新的定時器以前判斷上一個定時器是否正在運行,若是正在運行,就清除正在進行的定時器,再從新開啓定時器。 但遺憾的是, 除了啓動或中止計時器以外,沒有其餘方法能夠與計時器交互。get

在啓動定時器以前檢測若是定時器不爲null,須要清除定時器
  private timer = null;
  private clearPollTimer() {
    window.clearTimeout(this.timer);
    this.timer = null;
  }

  private setTimer() {
      if (this.timer !== null) {
        this.clearPollTimer();
      }
      this.timer = setTimeout(function () {
        this.getData();
      }.bind(this), 5000);
  }

  getData() {
    http.get('xxxx', () => {
      //....
      this.setTimer();
    });
  }
相關文章
相關標籤/搜索