如果它在javascript中运行,如何停止超时

时间:2018-04-12 09:32:03

标签: javascript

我有一个如下所示的超时设置:

var someObj = {

  init: function() {

    someObj.timeout();
    someObj.someWork();

  },

  timeout : setTimeout(function() {
        someObj.myFunc();
    }, 15000),

  myFunc: function() {
        console.log('myFunction called');
    },

  someWork: function(){
    console.log('some work');
    if(this.timeout !== null){
        console.log('clearing timeout...');
        clearTimeout(this.timeout);
    }
  }

}

$(function() {
    someObj.init();
});

如果将超时分配给timeout变量而不是null,我想停止超时。

Jsfiddle链接:https://jsfiddle.net/jy2p7jtd/17/

有可能吗?

更新

这是分配超时并清除它的有效方法吗?

var someObj = {

 timeout :null,

  init: function() {
    someObj.make();
    someObj.someWork();
  },

  make: function(){
    this.timeout = setTimeout(function() {
        console.log('myFunction called');
    }, 15000)
  },

  someWork: function(){
    console.log('timeout is ', this.timeout);
    if(this.timeout !== null){
        console.log('clearing timeout...');
        clearTimeout(this.timeout);
    }
  }
}

$(function() {
    someObj.init();
});

更新了链接:https://jsfiddle.net/jy2p7jtd/41/

2 个答案:

答案 0 :(得分:2)

声明另一个属性timeoutId:null并检查它是否存在然后清除它。



var someObj = {
  timeoutId: null,
  init: function() {
    this.timeoutId = this.timeout();
    someObj.someWork();
  },

  timeout: function() {
    return setTimeout(function() {
      someObj.myFunc();
    }, 15000)
  },

  myFunc: function() {
    console.log('myFunction called');
  },

  someWork: function() {
    console.log('some work');
    if (this.timeoutId) {
      console.log('clearing timeout...');
      clearTimeout(this.timeoutId);
    }
  }

}

$(function() {
  someObj.init();
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

clearTimeout()阻止使用setTimeout()设置的函数执行。