zoukankan      html  css  js  c++  java
  • 漂亮的代码2:遍历文件夹目录,使用promise

    看到一个问题: 找到文件夹下所有文件:
    自己写了一个:

    function walk(dir, ext, callback) {
        ext = ext.charAt(0) === "." ? ext : `.${ext}`;
    
        fs.readdir(dir, (err, files) => {
            files.forEach(f => {
                fs.lstat(path.join(dir, f), (err, st) => {
                    if (st.isDirectory()) {
                        walk(path.join(dir, f), ext, callback);
                    } else {
                        if (path.extname(f) === ext) {
                            callback(null, f);
                        }
                    }
                })
            });
        });
    }
    

    没有想到很好的办法,获得返回值。网上找了找:

    function walk(dir) {
      
        let readDirAsync = Promise.promisify(fs.readdir);
        let lstatAsync = Promise.promisify(fs.lstat);
    
        return readDirAsync(dir).then(files => {
    
            return Promise.all(files.map(f => {
                let file = path.join(dir, f);
    
                return lstatAsync(file).then(stat => {
                    if (stat.isDirectory()) {
                        return walk(file);
                    } else {
                        return [file];
                    }
                });
            }));
        }).then(files => {
            return files.reduce((pre, cur) => pre.concat(cur));
        });	
    }
    
    walk("~/home").then(x => console.log(x));
    

    自己写成了一堆屎,好好学习。

  • 相关阅读:
    MySQL 清理slowlog方法
    MySQL定位锁争用比较严重的表
    Jvm介绍
    MyEclipse6.5的SVN插件的安装
    BASE64图片转字符串
    JDK常用工具
    Ftp服务端安装-Linux环境
    数据结构之队列
    自定义Exception异常
    基于Lua语言的触动精灵脚本开发
  • 原文地址:https://www.cnblogs.com/htoooth/p/5528318.html
Copyright © 2011-2022 走看看