文件操作 异步读取目录的demo - nqdeng/7-days-nodejs GitHub Wiki

/**
 * 异步遍历文件夹
 */
const fs = require("fs")
const path = require("path")

function travel(dir, callback, finish) {
    
    // 异步读取目录
    fs.readdir(dir, "utf8", function(err, files) {
       (function next(i) {
            if( i < files.length) {  // 说明当前目录有文件
            
                var pathname = path.join(dir, files[i])
                // fs.stat是读取文件的属性
                fs.stat(pathname, function(err, stats) {
                    if(stats.isDirectory()) { // 目录
                        travel(pathname, callback, function() {
                            next(i+1);
                        })
                    } else { // 是文件
                        callback(pathname, function() {
                            next(i + 1);
                        })
                       
                    }
                })
            } else {
                finish && finish();
            }
       })(0)
    })
}


travel("./dir", function(pathname, fn) {
    console.log("文件名-->", pathname)
    fn();
})

/**
 * 执行的结果
文件名--> dir\a\a-1\a-1-1.txt
文件名--> dir\b\b-1.txt
文件名--> dir\b\b-2.txt
文件名--> dir\c文件.txt
 * 
 */

作者这里的调用这里没写,然后初看有点懵逼,后来想一下,是自己在调用的时候,callbak其实第二个参数又是一个回调