节点:在recursion中遍历目录
我对Node很新颖…我需要敲打Node的asynchronous行为和callback结构。 在这里,我现在正在努力:
// 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); });
我试图遍历一个目录树。 原则上,该function工作很好…只要不回拨,但在控制台上打印目录名称。 所有文件夹和子文件夹按预期出现。 但是当我做callback时,callback不会被调用比第一级更深的recursion。
Pleeeaaassee帮助! 多谢你们!
你的问题在这里,在if (stat ...)
分支中:
readAllDirs(fullpath);
您需要将提供的callback再次传递回recursion:
readAllDirs(fullpath, result);