首页 > 解决方案 > 使用带有 readdir 的 Promises 来显示目录

问题描述

我知道有更好的方法可以做到这一点,并且诸如 serve-index 之类的工具已经作为 npm 包存在以列出目录结构,但我想在我的设备上进行测试,因为我对使用 Node.js 和JavaScript。

目前,我的代码如下,我对为什么我的数组为空感到困惑。

let directoryTree = [];    
let directoryList = new Promise((resolve, reject) => { 
    resolve(fs.readdir(path.join(__dirname, '..'), (err, fileList) => { 
        for (file of fileList) {
            console.log(file);
            directoryTree.push(file);
        }
    }));

}).then(() =>  console.log(directoryTree))
  .catch((err) => console.log(error));

显示的是

[]
app
files
node_modules
package-lock.json
package.json

这向我表明,在 readdir 完成执行之前,promise 正在解决,否则不会首先记录空数组。我相信那时我对承诺的使用可能不正确,但我可能是错的。我很感激任何建议!

标签: javascriptnode.jspromise

解决方案


当回调完成异步获取数据时,您可以调用resolve()来解决承诺。

然后,当获取解析数据时,您将在then()回调中获得文件列表:

new Promise((resolve, reject) => { 
    fs.readdir(path.join(__dirname, '..'), (err, fileList) => { 
        err ? reject(err) : resolve(fileList); //resolve with list of files
    });
})
.then((list) =>  console.log(list))
.catch((err) => console.log(err));

推荐阅读