节点:在递归中遍历目录

Node: Traversing directories in a recursion

本文关键字:遍历 递归 节点      更新时间:2023-09-26

我对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);