Javascript 节点:在递归中遍历目录
我对Node非常陌生……我需要在脑海中反复思考Node的异步行为和回调结构。我现在在这里挣扎:Javascript 节点:在递归中遍历目录,javascript,node.js,recursion,callback,traversal,Javascript,Node.js,Recursion,Callback,Traversal,我对Node非常陌生……我需要在脑海中反复思考Node的异步行为和回调结构。我现在在这里挣扎: // REQUIRE -------------------------------------------------------------------- fs = require('fs'); path = require('path'); // FUNCTION readAllDirs ---------------------------------
// REQUIRE --------------------------------------------------------------------
fs = require('fs');
path = require('path');
// FUNCTION readAllDirs -------------------------------------------------------
function readAllDirs(dir, result) {
if (!result) {
result = function() {};
};
fs.readdir(dir, function(err, list) {
if(err) { return result(err) };
list.forEach(function(file) {
var fullpath = path.resolve(dir, file);
fs.stat(fullpath, function(err, stat) {
if(err) { return result(err) };
if(stat && stat.isDirectory()) {
readAllDirs(fullpath);
//console.log('In: ' + fullpath);
result(null, fullpath);
}
});
});
});
}
// MAIN -----------------------------------------------------------------------
readAllDirs('/somedir', function(err, dirs) {
console.log(dirs);
});
我尝试遍历目录树。原则上,该函数运行良好…只要我不回调,而是在控制台上打印目录名。所有文件夹和子文件夹按预期显示。但是当我进行回调时,回调不会被调用用于比第一级更深的递归
请帮忙!谢谢大家 您的问题在这里,在
if(stat…
分支中:
readAllDirs(fullpath);
您需要将提供的回调再次传递回递归:
readAllDirs(fullpath, result);
成功了!非常感谢你!多亏了阿尔尼塔克。想想这个问题,我现在很清楚了。需要为每个readAllDirs函数调用提供回调函数(在上面的示例中是带有console.log…)的函数)。我在readAllDirs函数本身中没有这样做。所以,没有回调函数,也没有console.log。。。定义了。