如何防止设置多个setTimeout?

时间:2014-12-16 18:04:26

标签: javascript jquery loops timeout settimeout

我有一个代表处理视频的javascript对象。在视频处理过程中,我每隔5000毫秒向服务器发送一个请求,一旦处理完毕,它应该取消绑定并完成。问题是,每次检查服务器是否完成时,它都会重新呈现自身的实例,并绑定额外的5000毫秒超时。结果发生指数循环,最终会使浏览器崩溃。

由于此事件处理程序,我发生了循环错误:

initialize: function() {
  this.on('all', this.reset_auto_refresh, this);
  this.auto_refresh();
},

投放此initialize()方法后,它会绑定reset_auto_refresh并运行auto_refresh

auto_refresh: function(timeout) {
  if(this.is_processing()) {
    if(!timeout) timeout = 5000;
    var callback = _.bind(function() {
      this._timer = null;
      this.fetch({error: _.bind(function() { this.reset_auto_refresh(15000); }, this)});
      this.auto_refresh();
    }, this);
    this._timer = setTimeout(callback, timeout);
  }
},
reset_auto_refresh: function(timeout) {
  if(this._timer) clearTimeout(this._timer);
  this.auto_refresh(timeout);
}

因为每次实例化时,它在技术上都是一个不同的对象,我找不到任何实例共享单个._timer的方法,并且因此,他们不断添加新的setTimeout,即使已经存在且正在运行。

有人知道最佳做法,或者阻止多个实例在此设置setTimeout的方法吗?

0 个答案:

没有答案