在文档中展示了 readdir 和 stat 的两个版本。它们都有异步和同步版本
因为
我想做的就是将运行脚本所在目录内存在的目录映射到返回错误
返回
readir/readdirSync
和 stat/statSync
。因为
readidir
和 stat
是异步的,我希望它们能返回一个 Promise。但是,在尝试使用 async/await
时,脚本不会等待 readdir
解决,如果我使用 .then/.catch
,则会出现错误 cannot read .then of undefined
。我想做的就是将运行脚本所在目录内存在的目录映射到
dirsOfCurrentDir
映射表中。
返回错误 cannot read .then of undefined
const fs = require('fs');
const directory = `${ __dirname }/${ process.argv[2] }`;
const dirsOfCurrentDir = new Map();
fs.readdir(directory, (err, files) => {
let path;
if (err)
return console.log(err);
files.forEach(file => {
path = directory + file;
fs.stat(path, (err, stats) => {
if (err)
return console.log(err);
dirsOfCurrentDir.set(file, directory);
});
});
}).then(() => console.log('adasdasd'))
console.log(dirsOfCurrentDir)
返回 Map {}
const foo = async () => {
await fs.readdir(directory, (err, files) => {
let path;
if (err)
return console.log(err);
files.forEach(file => {
path = directory + file;
fs.stat(path, (err, stats) => {
if (err)
return console.log(err);
dirsOfCurrentDir.set(file, directory);
});
});
});
};
foo()
console.log(dirsOfCurrentDir)
编辑
我最终选择使用同步版本的这两个函数readdirSync
和statSync
。虽然我更愿意使用异步方法或promisify,但我仍然没有弄清楚如何使用它们使我的代码正常工作。
const fs = require('fs');
const directory = `${ __dirname }/${ process.argv[2] }`;
const dirsOfCurrentDir = new Map();
const dirContents = fs.readdirSync(directory);
dirContents.forEach(file => {
const path = directory + file;
const stats = fs.statSync(path);
if (stats.isDirectory())
dirsOfCurrentDir.set(file, path);
});
console.log(dirsOfCurrentDir); // logs out the map with all properties set
readdir
的callback
参数是您将传递到.then
中的函数。它不像文档所示返回一个 Promise。 - pushkin