我有一个递归地走树的javascript函数。它有两个“标志”变量,在函数本身的范围之上被设置为false或true,所以如果一个标志在“walkTree”函数被递归时被设置为true,那么对于每个递归。另一方面,for循环可能存在带返回值的函数,如果有的话。我遇到的问题是当递归过多时出现错误。如何使这个同步递归函数异步
我想通过使这个递归函数异步来防止这个问题,我已经尝试将for循环中的子walkTree()调用放入setTimeout中,但现在的问题是其余的函数将在其余的异步内容完成之前执行(并可能返回错误的值)。那么我怎样才能使这个异步,同时仍然确保返回正确的值(而不是递归中的顶级函数调用)?
正如您所看到的,该函数的结尾使用了由所有调用共享的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;
}
}
异步功能将无法返回一个有用的值,你需要提供一个回调函数作为参数。 – zzzzBov
为什么你没有检查元素(参数)是否有循环前通过他们的孩子? – Headshota
叶在我的实际功能,我正在做如果(n.children!= undefined && n.children.length> 0) –