Javascript 如何在node js中多次覆盖并向同一文件追加数据

Javascript 如何在node js中多次覆盖并向同一文件追加数据,javascript,node.js,Javascript,Node.js,我有一个“clients.txt”文件,其中有一个电子邮件列表。我试着运行一个发送电子邮件的程序,在这个程序中,我从文件中选择了一些要使用的电子邮件,在这种情况下,数字是2。在我使用这两封电子邮件之后,我想在没有它们的情况下覆盖“clients.txt”。问题是当我试着只运行一次代码时,一切都正常!但如果我做了一个循环,就会出问题。期待你们的帮助。谢谢我在下面添加代码。PS:对不起,我的英语不好 function readEmails(){ const fs = require('fs'

我有一个“clients.txt”文件,其中有一个电子邮件列表。我试着运行一个发送电子邮件的程序,在这个程序中,我从文件中选择了一些要使用的电子邮件,在这种情况下,数字是2。在我使用这两封电子邮件之后,我想在没有它们的情况下覆盖“clients.txt”。问题是当我试着只运行一次代码时,一切都正常!但如果我做了一个循环,就会出问题。期待你们的帮助。谢谢我在下面添加代码。PS:对不起,我的英语不好

function readEmails(){
    const fs = require('fs');
    clients_list = fs.readFileSync('clients.txt', 'utf8').split('\n');
    let filtered = clients_list.filter(function (el) {
        return el != null && el != '';
    });
    return filtered
}
function dump_array(arr, file){
    let fs = require('fs');
    let file = fs.createWriteStream(file);
    file.on('error', function(err) { /* error handling */ });
    arr.forEach(function(v) { file.write(v + '\n'); });
    file.end();
}

while_var = 0;
while (while_var < 2){
    while_var ++;
    let all_clients = readEmails();
    let selected_clients = [];
    if (all_clients.length > 0){
        selected_clients = all_clients.splice(0,2);
        dump_array(all_clients, 'clients.txt');
        console.log(selected_clients);
    }else{
        console.log('No more clients')
    }
}
函数readEmails(){ 常数fs=要求('fs'); clients_list=fs.readFileSync('clients.txt','utf8').split('\n'); let filtered=clients\u list.filter(函数(el){ 返回el!=null&&el!=''; }); 返回过滤 } 函数转储_数组(arr,文件){ 设fs=require('fs'); 让file=fs.createWriteStream(文件); on('error',function(err){/*错误处理*/}); arr.forEach(函数(v){file.write(v+'\n');}); file.end(); } 而_var=0; while(while_var<2){ 而_var++; 让所有_客户端=readEmails(); 让选定的_客户端=[]; 如果(所有_.length>0){ 选定的_客户端=所有_客户端。拼接(0,2); dump_数组(所有_客户端,'clients.txt'); console.log(选定的_客户端); }否则{ console.log('不再有客户端') } }
const fs=require('fs');
函数readEmails(){
const clients_list=fs.readFileSync('clients.txt','utf8').split('\n');
const filtered=clients\u列表
//清除false、0和未定义
.过滤器(el=>!!el)
//删除额外的空格和符号\r\n
.map(el=>el.trim());
返回过滤;
}
函数转储_数组(arr,文件){
//这里你需要同步方法。
fs.writeFileSync(文件,arr.join('\n'));
//这是原始代码中的“已声明”错误
}
设_var=0时;
while(while_var++<2){
让所有_客户端=readEmails();
让选定的_客户端=[];
如果(所有_.length>0){
选定的_客户端=所有_客户端。拼接(0,2);
dump_数组(所有_客户端,'clients.txt');
console.log(选定的_客户端);
}否则{
console.log('不再有客户端')
}
}

在每个循环中,我希望从
clients.txt
中获取两个客户端,并在没有它们的情况下覆盖文件。所以我需要把
让所有的客户机=readEmails()在循环中,因为每次都会有不同的
clients.txt
内容。您提供的代码不好。我希望在每个循环中都有两个新的客户端,在
让选定的\u clients=[]
中,并覆盖没有它们的“clients.txt”。@popescuandrei好的,我修复了它now@popescuandrei我修正了代码并在我的机器上检查,工作正常
const fs = require('fs');

function readEmails(){
    const clients_list = fs.readFileSync('clients.txt', 'utf8').split('\n');
    const filtered = clients_list
        // clear false, 0 and undefined too
        .filter(el => !!el) 
        // remove extra spaces and \r symbols
        .map(el => el.trim()); 
    return filtered;
}
function dump_array(arr, file){
    // Here you need sync method. 
    fs.writeFileSync(file, arr.join('\n')); 
    // And here was 'already declared' error in orginal code
}

let while_var = 0;
while (while_var++ < 2){
    let all_clients = readEmails();
    let selected_clients = [];
    if (all_clients.length > 0){
        selected_clients = all_clients.splice(0,2);
        dump_array(all_clients, 'clients.txt');
        console.log(selected_clients);
    }else{
        console.log('No more clients')
    }
}