首页 > 解决方案 > 如何正确操作并返回带有节点的文件数组?

问题描述

给定一个包含降价文件的目录,即

myDir
|- fileA.md
|- fileB.md
|- fileC.md
|- fileD.md

我正在尝试通过删除文件扩展名来创建这些文件的数组。

我正在尝试这个:

var mdFiles = fs.readdir('myDir', (err, files) => {

    const filesNoExt = []

    files.forEach( file => {      
        filesNoExt.push(file.slice(0, -3)
    })
    return filesNoExt
});

console.log(mdFiles)

console.log命令的结果是undefined.

如果我像这样修改这个脚本(所以,通过console.log在函数内部添加一个readdir):

var mdFiles = fs.readdir('myDir', (err, files) => {

    const filesNoExt = []

    files.forEach( file => {      
        filesNoExt.push(file.slice(0, -3)
    })
    console.log(filesNoExt)
});

console.log(mdFiles)

这是我得到的:

undefined
[
  'fileA',
  'fileB',
  'fileC',
  'fileD'
]

第一行undefined与之前完全一样,但随后还打印了console.log函数内部的结果,这表明该filesNoExt数组已正确填充了剥离的文件名。

如何filesNoExt从函数中正确返回数组mdFiles,以便我也可以从外部访问其内容?

标签: javascriptnode.jsfs

解决方案


它不起作用的原因是因为readdir它是一个异步函数,这意味着它与您的其余代码并行运行。如果要阻止执行,请使用readdirSync

var mdFiles = fs.readdirSync('myDir');
const filesNoExt = [];
mdFiles.forEach(file => {      
    filesNoExt.push(file.slice(0, -3)
});
console.log(filesNoExt);

推荐阅读