Почему этот оператор if не работает для вызова моей функции только при выполнении условия? - PullRequest
0 голосов
/ 07 августа 2020

Изначально я не являюсь автором этого кода, поэтому извиняюсь за пробелы в моих знаниях. У меня есть функция getRecommendations, которая определяет, совпадает ли текущий домен пользователя (проанализированный с URL-адреса) с каким-либо в массиве под названием «домены». Если это так, мы хотим вызвать fetchRecommendations. Если совпадений нет, мы должны вернуться без вызова функции. Прямо сейчас fetchRecommendations вызывается независимо от текущего домена пользователя. Я немного озадачен. Это неуместный возврат? Мы неправильно называем fetchRecommendations? Благодарен за любое понимание.

В качестве примечания, мне было предложено, что проблема заключалась в «возврате». Но я пробовал разные места размещения, и код, похоже, сломался.

export const getRecommendations = url =>

  browser.storage.local.get("domains").then(({ domains }) => {
    const domain = parseDomain(url);

    if (domains.includes(domain)) { 
      return fetchRecommendations(url);
    }
    else {
      return;
    }
  });

export const fetchRecommendations = url =>
  browser.storage.local.get("user").then(({ user }) =>
    fetch(trestle.api.recommendations, {
      method: "POST",
      body: JSON.stringify({ currentUrl: url, emailAddress: user.username }),
      headers: {
        Authorization: `Bearer ${user.token}`,
        Accept: "application/json",
        "Content-Type": "application/json"
      }
    })
    .then(response => response.json())
    .then(recommendation => recommendation)
    .catch(e => new Error("Unable to return recommendations for company"))
  );

Думаю, именно здесь мы устанавливаем домены в хранилище:

export const getAnalyzedDomains = () =>
  fetch(trestle.api.domains)
    .then(response => response.json())
    .then(domains =>
      browser.storage.local.set({ domains }).then(() => domains)
    );

Кроме того, вот функция parseDomain , импортировано из другого файла (этот файл импортирован из psl):

export const parseDomain = url => {
  if (url === undefined || url === null) {
    return "";
  }

  const protocol = url.indexOf("://");
  url = url.substr(protocol + 3, url.length);
  const pos = url.indexOf("/") === -1 ? url.length - 1 : url.indexOf("/");
  const domain = url.substr(0, pos);

  return parse(domain).domain || "";
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...