簡體   English   中英

NodeJs:fs.appendFile函數似乎錯過了給定的最后一個字符串

[英]NodeJs: fs.appendFile function seems to miss last String given

我是NodeJS的新手,我嘗試了append函數。 當我在下面的代碼中運行時,僅在提示用戶之后輸入用戶輸入,然后將其添加到收藏夾中,並放入帶有歌手名稱的文件。 並附加收藏歌曲,似乎如果用戶輸入退出應將其附加到文件,但不是??? 同時,如果添加了對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是異步的。 當您調用它時,io操作僅排隊。 不幸的是,您的腳本在真正的io操作發生之前就退出了。

所以。 您必須將fs.appendFileSyncfs.appendFile與回調(第3個參數)一起使用,並在調用回調時執行所有進一步的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM