Почему последний оператор if всегда выполняется? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь заставить функцию завершиться, когда stop == false, но я не совсем уверен, как все выполняется, исходя из того, что мне говорят мои сообщения об отладке.

Код:

chrome.tabs.onRemoved.addListener(checkTabs);
function checkTabs() {

  var stop = true;
  chrome.windows.getAll({populate:true},function(windows)
  {
    windows.forEach(function(window)
    {
      window.tabs.forEach(function(tab)
      {
        for(var i = 0; i < numWatch; i++)
        {
          if(tab.url.indexOf(watchList[i]) != -1)
          {
            stop = false;
            alert("(1)" + stop); //When the if condition is false, I somehow get this alert after the one below
            return;
          }
        }
      });
    });
  });

  alert("(2)" + stop); //I always get this alert first and it always reads "true"
  if(stop == true)
  {
    clearInterval(timer);
    timerOn = false;
  }
}

Этот блок кода всегда выполняется - мое первое предупреждение всегда "true"; даже когда я настраиваю свои вкладки таким образом, чтобы стоп был установлен в ложь, он сначала предупреждает «true», а затем предупреждает «false»:

  if(stop == true)
  {
    clearInterval(timer);
    timerOn = false;
  }

Почему это? Я вижу довольно простой обходной путь, чтобы заставить мою программу работать, но мне любопытно, почему моя функция ведет себя так странно: кажется, что нижний оператор if каким-то образом выполняется перед операторами перед ним ...

Вот мой манифест (хотя я сомневаюсь, что он уместен) - приведенный выше код является частью моего скрипта background.js:

{
  "manifest_version": 2,
  "name": "Drill Sergeant",
  "description": "Tracks time spent on 'watchlist' websites",
  "version": "1.0.0",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "background": {"scripts": ["background.js"]},
  "permissions": ["activeTab", "webNavigation", "notifications", "tabs", "background"]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...