Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点:在递归中遍历目录_Javascript_Node.js_Recursion_Callback_Traversal - Fatal编程技术网

Javascript 节点:在递归中遍历目录

Javascript 节点:在递归中遍历目录,javascript,node.js,recursion,callback,traversal,Javascript,Node.js,Recursion,Callback,Traversal,我对Node非常陌生……我需要在脑海中反复思考Node的异步行为和回调结构。我现在在这里挣扎: // REQUIRE -------------------------------------------------------------------- fs = require('fs'); path = require('path'); // FUNCTION readAllDirs ---------------------------------

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

成功了!非常感谢你!多亏了阿尔尼塔克。想想这个问题,我现在很清楚了。需要为每个readAllDirs函数调用提供回调函数(在上面的示例中是带有console.log…)的函数)。我在readAllDirs函数本身中没有这样做。所以,没有回调函数,也没有console.log。。。定义了。