节点:递归遍历目录

Node: Traversing directories in a recursion

我是 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);
   });

我尝试遍历目录树。原则上该功能运行良好...只要我不回调而是在控制台上打印目录名称即可。所有文件夹和子文件夹都按预期出现。但是当我进行回调时,回调不会被调用以进行比第一级更深的递归。

请帮帮忙!谢谢大家!

你的问题在这里,在 if (stat ...) 分支内:

readAllDirs(fullpath);

您需要将提供的回调再次传递回递归:

readAllDirs(fullpath, result);