节点:在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);