从fetchNotes
函数调用addNote
后,它向我显示undefined
,因为push
函数中未定义addNote
方法
const fs = require('fs');
const fetchNotes = ()=>{
fs.readFile('data.json',(err,notes)=>{
if(err){
// return empty array if data.json not found
return [];
}else{
// return Object from data found data.json file
return JSON.parse(notes)
}
});
}
const saveNotes = (notes) =>{
fs.writeFile('data.json',JSON.stringify(notes),()=>{
console.log('Notes is successfully saved');
});
}
const addNote = (title, body)=>{
const note = {
title,
body
}
const notes = fetchNotes();
//Push method not defined
notes.push(note);
saveNotes(notes);
return note;
}
module.exports.addNote = addNote;
答案 0 :(得分:0)
return JSON.parse(notes)
不会将此值存储在fetchNotes
内,因为它是异步的,因此您稍后会获取文件的内容。
要异步执行,可以使用async / await:
const fetchNotes = () => {
return new Promise((resolve, reject) => {
fs.readFile('data.json', (err,notes) => resolve(JSON.parse(notes)));
})
}
const addNote = async (title, body) => {
// ...
const notes = await fetchNotes();
notes.push(note);
saveNotes(notes);
return note;
}
您也可以同步执行此操作:
const fetchNotes = () => JSON.parse( fs.readFileSync('data.json') );
const notes = fetchNotes();
答案 1 :(得分:0)
它返回undefined
,因为在回调中返回时,并不是从fetchNotes
函数本身返回的。
也许您可以使用readFileSync
而不使用回调,或者可以许诺并使用async/await
const fetchNotes = () => {
return new Promise((res, rej) => {
fs.readFile('data.json', (err, notes) => {
if (err) {
// return empty array if data.json not found
res([]);
} else {
// return Object from data found data.json file
res(JSON.parse(notes));
}
});
});
}
const addNote = async (title, body) => {
const note = {
title,
body
}
const notes = await fetchNotes();
//Push method not defined
notes.push(note);
saveNotes(notes);
return note;
}
或者,您可以使用utils.promisify