fs.readdir回调不更新全局变量

时间:2019-03-28 22:20:28

标签: node.js

我正在解析特定目录中具有自定义文件扩展名的文件(在下面的示例中,我使用.txt,但这不是重点),这意味着我需要获取文件名列表。由于某种原因,我用于存储文件名最终结果的全局变量未更新。

在函数中引用global.时,我尝试将其放在txtFiles前面,但是没有任何变化。我也尝试过将.then(function {return txtFiles})放在fs.readdir函数的末尾,但是它抱怨无法获取未定义的.then。我还将console.log放在用于调试的函数中(在下面的代码中进行了注释),该函数输出正确的内容(文件子目录中带有.txt扩展名的文件名数组)。

由于某种原因,它似乎正在fs.readdir的回调函数中创建本地txtFiles变量

var fs = require('fs');
const path = require('path');
const EXTENSION = '.txt';
const dirpath = path.join(__dirname, '/files');

var txtFiles = [];
function getFiles() {
    fs.readdirSync(dirpath, function (err, files) {
        list = files.filter(function (file) {
            return path.extname(file).toLowerCase() === EXTENSION;
        });
        txtFiles = list;
        //console.log(txtFiles)
    })
    return txtFiles;
}
getFiles()
console.log(txtFiles)
console.log(getFiles())

我希望txtFiles是带有.txt的文件数组。文件子目录中的扩展名,但实际输出是第6行设置的结果(在上面的示例代码中,其输出为[]

EDIT1:已更新代码以使用同步版本的readdir-输出未更改

1 个答案:

答案 0 :(得分:0)

感谢@FelixKling指出同步执行是一种选择,感谢@MarcosCasagrande指出readdirSync函数没有回调函数。

在记住这一点后,代码可以正常工作,并且看起来像这样:

Convert.ToInt32(tb_viewIngredient1.Text)