栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

node.js fs.readdir递归目录搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

node.js fs.readdir递归目录搜索

基本上有两种方法可以实现此目的。在异步环境中,您会注意到有两种循环:串行循环和并行循环。串行循环等待一个迭代完成,然后再移至下一个迭代-
这可确保循环的每个迭代均按顺序完成。在并行循环中,所有迭代都在同一时间开始,一个迭代可能在另一个迭代之前完成,但是它比串行循环快得多。因此,在这种情况下,最好使用并行循环,因为步行完成的顺序无关紧要,只要步行完成并返回结果即可(除非您希望它们按顺序进行)。

并行循环如下所示:

var fs = require('fs');var path = require('path');var walk = function(dir, done) {  var results = [];  fs.readdir(dir, function(err, list) {    if (err) return done(err);    var pending = list.length;    if (!pending) return done(null, results);    list.forEach(function(file) {      file = path.resolve(dir, file);      fs.stat(file, function(err, stat) {        if (stat && stat.isDirectory()) {          walk(file, function(err, res) { results = results.concat(res); if (!--pending) done(null, results);          });        } else {          results.push(file);          if (!--pending) done(null, results);        }      });    });  });};

串行循环如下所示:

var fs = require('fs');var path = require('path');var walk = function(dir, done) {  var results = [];  fs.readdir(dir, function(err, list) {    if (err) return done(err);    var i = 0;    (function next() {      var file = list[i++];      if (!file) return done(null, results);      file = path.resolve(dir, file);      fs.stat(file, function(err, stat) {        if (stat && stat.isDirectory()) {          walk(file, function(err, res) { results = results.concat(res); next();          });        } else {          results.push(file);          next();        }      });    })();  });};

并在主目录中对其进行测试(警告:如果主目录中包含很多内容,结果列表将非常庞大):

walk(process.env.HOME, function(err, results) {  if (err) throw err;  console.log(results);});

编辑:改进的例子。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号