NodeJs: функция fs.appendFile, кажется, пропускает последнюю заданную строку
Я новичок в nodejs, я пытался добавить функцию. Когда я запускаю приведенный ниже код, который просто принимает ввод пользователя после запроса, о фаворите певца и вставляет файл с именем певца. И добавление любимых песен, кажется, если пользователь вошел в выход, он должен добавить его в файл, но не??? Между тем, если его изменение на appendFileSync (Синхронная версия FN), выход добавляется??
Код:
var readline = require ('readline');
var fs = require('fs');
var rl = readline.createInterface(process.stdin, process.stdout);
var singer = {
name:'',
songs: []
};
rl.question("What is your fav singer? ", function(answer) {
singer.name = answer;
//creating a file for this singer
fs.writeFileSync(singer.name+".md", `${singer.name}\n====================\n\n`);
rl.setPrompt(`What's your fav songs for ${singer.name} ?`);
rl.prompt();
rl.on('line', function(song) {
singer.songs.push(song.trim());
fs.appendFile(singer.name+".md", `* ${song.trim()} \n`);
//***** WHY IF ITS EXIT ITS NEVER APPEND IT TO THE FILE
console.log(`* ${song.trim()} \n`);
if (song.toLowerCase().trim() === 'exit') {
fs.appendFile(singer.name+".md", "Bye");
//***** WHY ITS NEVER APPEND IT TO THE FILE
rl.close();
} else {
rl.setPrompt(`what else would ${singer.name} say? ('exit'to leave)`);
rl.prompt();
}
});
});
rl.on ('close', function() {
console.log ("%s is a real person that says %j", singer.name, singer.songs);
process.exit();
});
1 ответ
Так как fs.appendFile
асинхронный Когда вы звоните, операции ввода-вывода ставятся только в очередь. К сожалению, ваш скрипт завершается до того, как произойдут настоящие операции ввода-вывода.
Так. Вы должны использовать либо fs.appendFileSync
или же fs.appendFile
с обратным вызовом (3-й аргумент) и при вызове обратного вызова выполните все дальнейшие действия.