Javascript NodeJS:递归树浏览
我试图从parentID浏览数据库结果,这些结果可以与每个节点上都有多个分支的树进行比较,在这个树中,我希望按每个分支(而不是逐级)浏览它的分支。这是我的递归函数:Javascript NodeJS:递归树浏览,javascript,node.js,recursion,tree,Javascript,Node.js,Recursion,Tree,我试图从parentID浏览数据库结果,这些结果可以与每个节点上都有多个分支的树进行比较,在这个树中,我希望按每个分支(而不是逐级)浏览它的分支。这是我的递归函数: (function tail(file, parentID, entryCount) { console.log("TAIL CALLED: ", self); var opts = new Map(); var data = ""; opts["parentID"] = parentID;
(function tail(file, parentID, entryCount) {
console.log("TAIL CALLED: ", self);
var opts = new Map();
var data = "";
opts["parentID"] = parentID;
opts["Key"] = "";
opts["Value"] = "";
opts["RowID"] = "";
self.Read(opts, function (err, rslt ) {
for (var i = 0; i < rslt.length; ++i) {
(function () {
data = (rslt[i].Key + (rslt[i].Value != "-" ? rslt[i].Value : ""));
data += "\n";
var rowid = rslt[i].rowid;
fs.appendFile(file, data, function (err, rslt) {
(tail(file, rowid, entryCount));
});
})();
}
})
})(file, parentID, entryCount);
(函数尾部(文件、父ID、入口计数){
log(“尾部调用:”,self);
var opts=newmap();
var数据=”;
opts[“parentID”]=parentID;
选择[“键”]=“”;
选项[“值”]=“”;
选项[“RowID”]=“”;
self.Read(选项、函数(err、rslt){
对于(变量i=0;i
这个函数给了我逐级的结果,我想我可以理解为什么(tail的递归调用被放在堆栈上,并且没有立即执行?),但看不到如何使它工作
我也尝试过使用fs.appendFileSync()在下面调用tail,但同样的问题仍然存在。使用
appendFileSync
而不是appendFile
,以确保它们都按顺序编写
fs.appendFileSync(file, data);
tail(file, rowid, entryCount);
您的代码将在新行上显示每个节点,这会让人感到困惑(您不知道分支的起点和终点)。如果要在一行上显示从根开始到叶结束的分支,则必须更改代码(必须将结果累积为字符串,并将其传递给
尾部
调用,仅当遇到没有子节点的节点时才打印它,然后打印新行字符'\n'
).在NodeJS中实现深度浏览有两种解决方案:一种是使用串行回调的纯函数,第二种是使用async.series为每个分支强制串行。for循环仍然在递归调用tail之前进行,因此我仍然有width结果,而不是deph结果:s