如果超时在 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 link: 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/

声明另一个属性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>

clearTimeout()阻止使用 setTimeout(( 执行函数集。

最新更新