多次调用函数中的setTimeout

时间:2018-04-26 15:35:04

标签: javascript settimeout

我有一个函数,我曾经在进程运行时向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);
  }

}

1 个答案:

答案 0 :(得分:1)

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

要解决此问题,请声明它以使其范围限定为函数:

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

我还建议将"use strict" pragma添加到JS文件的顶部,这将有助于捕获这样的问题。隐含的全局变量是坏消息。