它看起來像我在nodejs中有一個併發問題。我意識到這不應該是可能的。Nodejs文件流併發
我正在處理數據的行從一個文件,並寫入另一個文件也行。在輸出文件中,我注意到線條被覆蓋,意味着我偶爾會看到輸出中的線條似乎被其他線條覆蓋了一半。我從閱讀流中讀取數據。它看起來大致是這樣的:
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()'做了什麼?它完全是同步的嗎?僅供參考,您可以使用'remaining = line.pop()'來簡化代碼。 – jfriend00
另請注意,'.write()'返回布爾值,表示輸出緩衝區是否已滿,您必須等待'drain'事件再次開始寫入。請參閱[文檔](https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback)。 – jfriend00
你可能想要使用[transform stream](http://codewinds.com/blog/2013-08-20-nodejs-transform-streams.html),然後使用'.pipe()'來處理所有的流量控制給你。 – jfriend00