Javascript “如何修复”;“未定义”;使用readFile将文件读入数组时使用数组
我正在尝试将文本文件中的文件名列表加载到js数组中 我尝试使用fs模块来实现这一点,虽然我可以在readFile函数中成功打印数组,但如果我返回数组并尝试在外部打印它,我就无法这样做Javascript “如何修复”;“未定义”;使用readFile将文件读入数组时使用数组,javascript,node.js,ecmascript-6,fs,Javascript,Node.js,Ecmascript 6,Fs,我正在尝试将文本文件中的文件名列表加载到js数组中 我尝试使用fs模块来实现这一点,虽然我可以在readFile函数中成功打印数组,但如果我返回数组并尝试在外部打印它,我就无法这样做 const fs = require("fs"); function parseFileList(fileToRead){ fs.readFile(fileToRead, 'utf8', (err, data) => { if (err) throw err; con
const fs = require("fs");
function parseFileList(fileToRead){
fs.readFile(fileToRead, 'utf8', (err, data) => {
if (err) throw err;
const textByLine = data.split("\n").slice(0,-1);
return textByLine;
});
}
const refList = parseFileList(argv.ref);
console.log(refList);
文件中的文件名应输出为字符串数组。但现在它只打印未定义的
。我认为这与readFile是异步的这一事实有关,但我不确定如何解决它。使用readFileSync
会容易得多,因为名称中的Sync
表示它是一个同步操作:
function parseFileList(fileToRead) [
const textByLine = fs.readFileSync(fileToRead, "utf8").split("\n").slice(0, -1);
return textByLine;
}
这是因为您在回调中得到响应。如果要使此功能正常工作,必须将其转换为承诺:
function parseFileList(fileToRead){
return new Promise((resolve, reject) => {
fs.readFile(fileToRead, 'utf8', (err, data) => {
if (err) reject(err);
const textByLine = data.split("\n").slice(0,-1);
return resolve(textByLine);
});
})
}
现在您可以像这样使用它:
parseFileList(filename).then(data => console.log(data))
您需要将
let data=await
放在async
函数中,使用let
执行此操作意味着无法在函数外部访问它。谢谢,删除了await函数。