node.js fs.readdir recursive directory search

前端 未结 30 2056
醉酒成梦
醉酒成梦 2020-11-22 15:55

Any ideas on an async directory search using fs.readdir? I realise that we could introduce recursion and call the read directory function with the next directory to read, bu

30条回答
  •  猫巷女王i
    2020-11-22 16:30

    I modified Trevor Senior's Promise based answer to work with Bluebird

    var fs = require('fs'),
        path = require('path'),
        Promise = require('bluebird');
    
    var readdirAsync = Promise.promisify(fs.readdir);
    var statAsync = Promise.promisify(fs.stat);
    function walkFiles (directory) {
        var results = [];
        return readdirAsync(directory).map(function(file) {
            file = path.join(directory, file);
            return statAsync(file).then(function(stat) {
                if (stat.isFile()) {
                    return results.push(file);
                }
                return walkFiles(file).then(function(filesInDir) {
                    results = results.concat(filesInDir);
                });
            });
        }).then(function() {
            return results;
        });
    }
    
    //use
    walkDir(__dirname).then(function(files) {
        console.log(files);
    }).catch(function(e) {
        console.error(e); {
    });
    

提交回复
热议问题