Рекурсивная функция всегда возвращает undefined в конце.Как исправить? - PullRequest
1 голос
/ 23 сентября 2019

При попытке вернуть количество потомков, содержащих: host, найденный в объекте, функция всегда возвращает undefined.

const plugin = stylelint.createPlugin(ruleName, isEnabled => {
  let childrenFound = 0;
  childrenFound = lookForChildren(rule.nodes, childrenFound);
  console.log(childrenFound); // Wrong Value: Always undefined
}


let lookForChildren = function(nodes, childFound) {

  if(childFound > 1) {

    console.log(childFound);

    return childFound;

  }

  nodes.forEach(node => {

    if (node.selector != undefined) {

      const selector = node.selector.replace(":host-context", "");

      if (selector.includes(":host")) {

        childFound++;

        return lookForChildren(node.nodes, childFound);

      } else {

        return lookForChildren(node.nodes, childFound);

      }

    }

  });
// This returns the wrong value so i deleted it
return childFound;
};


Но она должна возвращать переменную childFound, которая возвращается только тогда, когдабольше 1.

Эта функция проверяет, содержит ли документ scss селектор с более чем одним селектором :host, поскольку браузер компилирует его не так, как ожидалось.

Когда childFound больше, чемодин:

Ожидаемый: return childFound // Childfound is 2 or higher

Фактический: childrenFound всегда неопределен.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Использование for...to решило мою проблему.Спасибо @HarunYilmaz за указание на это и всем спасибо за помощь.

0 голосов
/ 23 сентября 2019

Вы должны возвращать значение внутри вашей функции, а не снаружи или ниже этой функции, просто измените положение оператора возврата внутри последней фигурной скобки.проверьте ниже код:

const plugin = stylelint.createPlugin(ruleName, isEnabled => {
  let childrenFound = 0;
  childrenFound = lookForChildren(rule.nodes, childrenFound);
  console.log(childrenFound); // Wrong Value: Always undefined
}


let lookForChildren = function(nodes, childFound) {

  if(childFound > 1) {

    console.log(childFound);

    return childFound;

  }

  nodes.forEach(node => {

    if (node.selector != undefined) {

      const selector = node.selector.replace(":host-context", "");

      if (selector.includes(":host")) {

        childFound++;

        return lookForChildren(node.nodes, childFound);

      } else {

        return lookForChildren(node.nodes, childFound);

      }

    }

  });
return childFound;
};

// This returns the wrong value so i deleted it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...