setTimeout в функции, вызываемой несколько раз - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть функция, которую я использовал, чтобы добавить индикатор состояния в 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 голосов
/ 26 апреля 2018

У вас нет var (или const или let) до idh, что делает его неявным глобальным . Это означает, что каждый вызов вашей функции использует одну и ту же переменную замыкания и перезаписывает ее значение.

Чтобы исправить проблему, объявите ее так, чтобы она была видна функции:

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

Я бы также посоветовал добавить прагму "use strict" в начало ваших файлов JS, что поможет отследить подобные проблемы. Скрытые глобалы - плохие новости.

...