js 读取目录,将目录内文件和目录分别压入数组

2017-02-06 20:57:55 +08:00
 raighne

读取 root 目录下文件,讲非文件夹的文件名压入数组,最后返回

function readdir(root) {
    return new Promise(
        (resolve, reject) => {
            fs.readdir(root, (err, files) => {
                if (err) {
                    reject(err);
                } else {
                    var folderdata = [];
                    files.forEach(file => {
                        var ps = path.join(root, file);
                        var stat = fs.statSync(ps);
                        if (!stat.isDirectory(file)) {
                            file = path.basename(file);
                            folderdata.push(file);
                        }
                    })
                    resolve(folderdata)
                }

            })
        }
    )
}
var fs2 = readdir(root).then((folderdata) => {
    console.log(folderdata)
});

这样打印

[ '.DS_Store',
  '.babelrc',
  'app.js',
  'package.json',
  't2.js',
  'test.js',
  'test2.js' ]

我想将这数组直接赋值给 fs2 ,应该怎么修改代码呢

2520 次点击
所在节点    JavaScript
4 条回复
learnshare
2017-02-06 21:24:48 +08:00
```js
var fs2 = [];

readdir(root).then((folderdata) => {
fs2 = folderdata;
// do something else
});
```
bdbai
2017-02-06 21:35:02 +08:00
这里读取目录是异步操作,封装在 Promise 对象中,只能用过调用 then 传入回调函数来获得结果。直接赋值得到的还是 Promise 对象。
fs 模块的函数一般都有 Sync 形式,但会阻塞线程。
wizardforcel
2017-02-06 22:41:53 +08:00
不明白为什么 readdir 用异步但是 stat 用同步。。
arzusyume
2017-02-07 09:33:40 +08:00
node7 可以 fs2 = await readdir(root)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX