Javascript 在被多次调用的函数中设置超时

Javascript 在被多次调用的函数中设置超时,javascript,settimeout,Javascript,Settimeout,我有一个函数,用于在进程运行时向div添加状态指示器,并在进程完成时将其删除。我遇到的问题是,当处理并完成多个函数时,working_句柄只会删除第一个进程的工作状态 如果我删除代码的setTimeout部分,它工作得很好,但是我希望它有一个延迟,因为它发生得太快了,有点不协调 function working_handle(id, state) { idh = id.replace(/^#/, ''); if (state === true) { console.log('W

我有一个函数,用于在进程运行时向div添加状态指示器,并在进程完成时将其删除。我遇到的问题是,当处理并完成多个函数时,working_句柄只会删除第一个进程的工作状态

如果我删除代码的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、const或let,这使它成为一个变量。这意味着对函数的每次调用都共享同一个闭包变量并覆盖其值

若要解决此问题,请声明它,使其作用域为函数:

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

我还建议将pragma添加到JS文件的顶部,这将有助于捕捉类似这样的问题。隐式全局变量是个坏消息。

句柄是否被多次调用?将timeout设置为全局变量,并在需要时将其清除。将变量放在idh之前。是否也可以放置html。以便我们可以在此处进行测试。