NodeJs:fs.appendFile函数似乎错过了给定的最后一个string

我是新的nodejs我试图追加函数。 当我运行下面的代码,提示他后简单地把用户input,关于歌手,并放入一个歌手名称的文件。 并附加fav歌曲,似乎如果用户input退出它应该被附加到文件,但是,它不? 同时,如果将其更改为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(); }); 

因为fs.appendFile是asynchronous的。 当你调用它时,io操作只能排队。 不幸的是,你的脚本在真正的io操作发生之前退出。

所以。 你必须使用fs.appendFileSyncfs.appendFile和callback函数(第三个参数),当callback被调用时,执行所有进一步的活动。

Interesting Posts