我是Node的新手......我需要在我的脑海中扼杀Node的异步行为和回调结构。我现在在哪里挣扎:
// 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);
});
我尝试遍历目录树。原则上该函数运行良好...只要我不回调但在控制台上打印目录名称。所有文件夹和子文件夹都按预期出现。但是当我进行回调时,回调不会被调用为比第一级更深的递归。
Pleeeaaassee帮忙!谢谢你们!
答案 0 :(得分:1)
您的问题出现在if (stat ...)
分支:
readAllDirs(fullpath);
您需要再次将提供的回调传递回递归:
readAllDirs(fullpath, result);