Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将承诺与readdir一起使用到diplay目录_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 将承诺与readdir一起使用到diplay目录

Javascript 将承诺与readdir一起使用到diplay目录,javascript,node.js,promise,Javascript,Node.js,Promise,我知道有更好的方法可以做到这一点,像SERVICE index这样的工具已经作为npm包存在,可以列出目录结构,但我想在我的上测试一下,因为我对使用Node.js和JavaScript还是比较陌生的 目前,我的代码如下,我不明白为什么我的数组是空的 let directoryTree = []; let directoryList = new Promise((resolve, reject) => { resolve(fs.readdir(path.join(__dir

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

语法是(来自):

重构:

let directoryList = new Promise((resolve, reject) => {
  fs.readdir(path.join(__dirname, '..'), (err, fileList) => { 
    if (err) reject(err)
    else resolve(fileList)
  });
})
// directoryList is a Promise that could reject or resolve
directoryList.then(() =>  console.log(directoryTree))
.catch((err) => console.log(error));
当回调异步获取数据时,可以调用
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));
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));