окно.местоположение.перезагрузить(); застрял в бесконечном цикле

Я хочу, чтобы эта функция перебирала все элементы, если она находит нужный элемент для загрузки своей страницы, и если она не находит нужный элемент, она должна перезагрузить страницу и снова зациклиться. Когда я удаляю window.location.reload(); он нормально загружается на страницу элемента. Это код:

var item_name = "Washed";
var item_color = "Red";

function pickItem() {
    let items = document.getElementsByClassName("name-link");

        for(i = 0; i < items.length; i++) {
            if((items[i].innerHTML).includes(item_name)) {
                for(j = 0; j < items.length; j++) {
                    if((items[j].innerHTML).includes(item_color)) {
                        if(items[i].href == items[j].href) {
                            window.location.assign(items[i, j].href);
                        }
                    }
                }
            }
        }
    window.location.reload();
}

В следующем виде он работает так, как я хочу, но зачем ему функция chrome.storage для работы? (Раньше я использовал его с chrome.storage, но он был слишком медленным для моих целей, поэтому мне пришлось его изменить.)

var item_name = "Washed";
var item_color = "Red";

function pickItem() {
    let items = document.getElementsByClassName("name-link");

    chrome.storage.sync.get(["itemName", "color"], function(data) {
        for(i = 0; i < items.length; i++) {
            if((items[i].innerHTML).includes(item_name)) {
                for(j = 0; j < items.length; j++) {
                    if((items[j].innerHTML).includes(item_color)) {
                            if(items[i].href == items[j].href) {
                                window.location.assign(items[i, j].href);
                                chrome.storage.sync.set({"item_url": items[i, j].href});
                            }
                    }
                }
            }
        }
    })
    window.location.reload()
}

person Joneh    schedule 08.10.2020    source источник


Ответы (1)


Я бы рекомендовал добавить логическую переменную, которая указывает, было ли уже найдено место для перехода, и обернуть вызов window.location.reload() внутри блока if, который проверяет состояние переменной.

e.g.

function pickItem() {
  let items = document.getElementsByClassName("name-link");
  let found = false;
  for (i = 0; i < items.length; i++) {
    if ((items[i].innerHTML).includes(item_name)) {
      for (j = 0; j < items.length; j++) {
        if ((items[j].innerHTML).includes(item_color)) {
          if (items[i].href == items[j].href) {
            found = true;
            window.location.assign(items[i, j].href);
          }
        }
      }
    }
  }
  if (!found) {
    window.location.reload();
  }
}
person obscure    schedule 08.10.2020