V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
raighne
V2EX  ›  JavaScript

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

  •  
  •   raighne · 2017-02-06 20:57:55 +08:00 · 2438 次点击
    这是一个创建于 2635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    读取 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 ,应该怎么修改代码呢

    4 条回复    2017-02-07 09:33:40 +08:00
    learnshare
        1
    learnshare  
       2017-02-06 21:24:48 +08:00
    ```js
    var fs2 = [];

    readdir(root).then((folderdata) => {
    fs2 = folderdata;
    // do something else
    });
    ```
    bdbai
        2
    bdbai  
       2017-02-06 21:35:02 +08:00 via Android
    这里读取目录是异步操作,封装在 Promise 对象中,只能用过调用 then 传入回调函数来获得结果。直接赋值得到的还是 Promise 对象。
    fs 模块的函数一般都有 Sync 形式,但会阻塞线程。
    wizardforcel
        3
    wizardforcel  
       2017-02-06 22:41:53 +08:00 via Android
    不明白为什么 readdir 用异步但是 stat 用同步。。
    arzusyume
        4
    arzusyume  
       2017-02-07 09:33:40 +08:00
    node7 可以 fs2 = await readdir(root)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4273 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 01:02 · PVG 09:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.