漂亮的代码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));
自己写成了一堆屎,好好学习。