У меня есть функция JavaScript, которая рекурсивно обходит дерево.Он имеет две переменные "flag", которые установлены в false или true выше области действия самой функции, и поэтому, если флаг установлен в true один раз, когда функция "walkTree" рекурсивна, он будет истинным для каждой рекурсии,С другой стороны, цикл for может существовать и с функцией return, если что-то для.Проблема в том, что при слишком большом количестве рекурсий я получаю сообщение об ошибке.
Я бы хотел предотвратить эту проблему, сделав эту рекурсивную функцию асинхронной, я попытался поместить вызов sub walkTree () внутри цикла for в setTimeout, но теперь у меня проблема в том, что остальныефункции будет выполнен (и может вернуть неправильное значение), прежде чем остальная часть асинхронного материала будет выполнена.Итак, как я могу сделать это асинхронным, в то же время убедившись, что верное значение будет возвращено (а не вызов функции top в рекурсии)?
Как видите, конец функции использует эту «переменную» flagB, совместно используемую всеми вызовами, и поэтому мы должны убедиться, что все рекурсивные вызовы завершены (и что-то возвращены) до началаодин проверяет эти условия.Спасибо!
var flagA = false;
var flagB = false;
var walkTree = function (n) {
var sub;
for (var i = 0; i < n.children.length; i++) {
sub = walkTree(n.children[i]);
if (sub === 'something-special') {
return sub;
}
}
var test = doSomethingWith(n);
if (test === "something") {
flagA = true;
}
if (test === "something-else") {
flagB = true;
}
if (flagB === true) {
return true;
}
if (test === "something-special") {
return test;
} else {
return false;
}
}