Как писать в новые файлы последовательно

Leahcim спросил: 14 ноября 2017 в 05:56 в: node.js

У меня есть каталог файлов (files ниже), каждый из которых содержит данные, которые обрабатываются (и смешиваются с данными из исходного файла data/phrase.js) перед записью преобразованных данных. (фактически добавляется) к новым файлам в выходном каталоге. Моя проблема заключается в том, что все данные для каждого файла записываются в файл в самом конце (после завершения всей обработки). Я предпочел бы обработать первый файл, а затем записать на диск, затем второй файл обработать и записать на диск и т. Д., Чтобы в памяти оставалось меньше данных. (Хотя в этом примере задействовано очень мало файлов, в моем настоящем приложении их гораздо больше).

Вопрос: почему данные записываются в файл в самом конце (после того, как все файлы имеют были обработаны)? Есть ли способ записать данные в файл, как только он будет готов, вместо того, чтобы держать все это в памяти, пока все данные для каждого файла не будут готовы?

    var fs = require('fs');
    //file with some data
    fs.readFile('./data/phrase.js', function(err, data){
        var somephrase = data.toString();
         //directory of many files
        fs.readdir('./files/', (err, files) => {    
             files.forEach(file => {
                let f = './files/' + file;
                fs.readFile(f, (err, data2) => {    
                    let somenumber = data2.toString();
                    //intermingle the data from initial file (phrase.js) with each of the files in files dir
                    let output = somenumber + somephrase;
                    //write output to new files
                    let output_file = './output/' + somenumber + 'js';
                    fs.appendFile(output_file, output,function(err){
                        if (err){
                                console.log("err")
                            }
                    });
                });
             });
        });
    });

phrase.js

cow jumped over the moon

файлы / one.js 1 файлов / two.js 2 выход

output/1.js   (1 cow jumped over the moon)
output/2.js   (2 cow jumped over the moon)


0 ответов