javascript - 使用 Promises 和 readdir 来显示目录

标签 javascript node.js promise

我知道有更好的方法可以做到这一点,并且诸如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

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

最佳答案

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

然后,当数据获取解析时,您将在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));

关于javascript - 使用 Promises 和 readdir 来显示目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748422/

相关文章:

javascript - 如何使用 PKCS7、CAdES、S/MIME (e-cpf/e-cnpj) 签署文档,以在浏览器上使用 javascript 创建 P7S 文件?

javascript - 正则表达式:匹配,但不包括匹配的部分

如果数据包含某些 URL,Javascript 无法解析 JSON

javascript - 无法运行 Node.js、express、socket.io 和 ejs?

node.js - 为什么Node.js停止工作?

javascript - AngularJS 和 Typescript 的 Promise

javascript - `console.log` 一个 mobx `@observable` 每当它的值改变时

node.js - if else 的工作与我想要的完全相反

javascript - 在 Promise 链中包含 if-else 条件

javascript - 不要更改 .then() 中的解析值