繁体   English   中英

函数中的setTimeout被多次调用

[英]setTimeout in a function being called multiple times

我有一个函数,用于在进程运行时向div添加状态指示器,并在该进程完成后将其删除。 我遇到的问题是,正在处理和完成多个函数时,working_handle仅删除第一个进程的工作状态。

如果我删除了代码的setTimeout部分,它会完美地工作,但是我希望在它上发生延迟,因为它发生得太快了,所以有点刺耳。

function working_handle(id, state) {

 idh = id.replace(/^#/, '');

  if (state === true) {
    console.log('WORKING'+'-'+idh);
    $(id).removeClass('error').addClass('working');
    $('#status').removeClass(idh+'-error').addClass(idh+'-working');
  } else {
    console.log('DONE'+'-'+idh);
    setTimeout(function() {
      $(id).removeClass('working');
      $('#status').removeClass(idh+'-working');
    }, 2000);
  }

}

您在idh之前没有var (或constlet ),这使其成为隐式的global 这意味着对函数的每次调用都共享相同的闭包变量并覆盖其值。

要解决此问题,请对其进行声明,使其作用域范围为:

var idh = id.replace(/^#/, '');

我还建议您在JS文件的顶部添加“使用严格”用法 ,这将有助于捕获此类问题。 内隐的全局变量是个坏消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM