Мне кажется, что у меня проблема параллелизма в nodejs. Я осознаю тот факт, что это не должно быть возможным.Nodejs filestream concurrency
Я обрабатываю данные по строке из файла и записываю ее в другой файл также в строках. В выходном файле я замечаю, что строки переписываются, что означает, что время от времени я вижу строки на выходе, которые, похоже, переписываются наполовину другими строками. Я прочитал данные из потока чтения. это выглядит примерно так:
let iStream = fs.createReadStream(inputFile);
let oStream = fs.createWriteStream(outputFile);
let remaining = '';
iStream.on('data',(data)=>{
remaining += data;
let line = remaining.split(/\r?\n/);
let lines = line.length;
if(lines > 0) {
remaining = line[lines - 1];
line.length = lines - 1;
line.forEach((curr)=>{
oStream.write(processLine(curr));
});
});
Есть ли возможность сбоев записи этой схемы производства или мне придется искать где-то еще?
Что делает 'processLine()' do? Это полностью синхронно? FYI, вы можете упростить свой код с помощью 'остаток = line.pop()'. – jfriend00
Также обратите внимание, что '.write()' возвращает boolean, который указывает, заполнен ли выходной буфер, и вам нужно дождаться, когда событие 'drain' начнет писать снова. См. [Doc] (https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback). – jfriend00
Возможно, вы захотите использовать [трансформировать поток] (http://codewinds.com/blog/2013-08-20-nodejs-transform-streams.html), а затем использовать '.pipe()', который будет обрабатывать все контроль потока для вас. – jfriend00