我想在console.log中输入一条消息,如果我尝试读取一个不存在的文件,则返回一个空数组。 getAllNotes函数触发有效,错误肯定会被抛出no such file or directory, open 'notes.json'
。
但是,如果我在if语句中没有指定throw err
,为什么会抛出错误?其次,为什么我的console.log消息没有输出而空数组没有返回?
var getAllNotes = () => {
console.log("MADE IT TO GET ALL NOTES")
var notesArray = fs.readFileSync('notes.json', (err, data) => {
if (err) {
console.log("There are no notes to display");
return [];
} else {
console.log("DATA",data)
console.log("MADE IT TO PARSE")
return JSON.parse(data);
}
});
console.log("INSIDE GET ALL NOTES", notesArray)
};
答案 0 :(得分:2)
fs.readFileSync
是一个阻止调用,并且不会像fs.readFile
一样进行回调。它只返回文件的内容,参见下面的例子:
var fs = require('fs');
var date = fs.readFileSync('myfile', 'utf8');
console.log(data);
当我运行你的例子时,抛出一个异常,因为你提供了一个回调函数,它期望一个字符串或对象的options参数。
您可以使用fs.existsSync(path)
进行阻止呼叫,以便在尝试阅读之前检查该文件是否存在。
或者,您可以使用readFile的非阻塞版本,并按照您的尝试提供回调。