我有一个遍历树形结构的 JavaScript 函数,它使用了两个“标志”变量,这些变量在函数本身外部被设置为 false 或 true。因此,如果在“walkTree”函数递归过程中某一次将标志设置为 true,那么每次递归都会是 true。另一方面,如果 for 循环中发现某些东西,该函数也可能通过返回退出。我的问题是当递归次数太多时,我就会遇到错误。
我想通过让这个递归函数异步化来解决这个问题。我尝试将子 walkTree() 调用放入 for 循环中的 setTimeout 中,但我现在的问题是在异步处理完成之前,函数的其余部分将被执行(并可能返回错误的值)。那么,在保证返回正确值的同时如何异步处理呢?(而不是递归调用中的顶层函数调用)?
如您所见,函数的结尾使用了所有调用共享的 flagB “变量”,因此我们需要确保在顶层函数检查这些条件之前,所有递归调用都已完成(并返回某些内容)。谢谢!
我想通过让这个递归函数异步化来解决这个问题。我尝试将子 walkTree() 调用放入 for 循环中的 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;
}
}
if
语句中的返回值。 - pimvdb