2013-09-27 75 views
4

在我的節點應用程序im使用createWriteStream方法中的寫入方法將數據寫入文件。現在我需要查找對於特定流的寫入是否完成。如何才能發現。節點js-將數據寫入可寫入流

var stream = fs.createWriteStream('myFile.txt', {flags: 'a'}); 
var result = stream.write(data); 

writeToStream(); 
function writeToStream() { 
    var result = stream.write(data + '\n'); 
    if (!result) { 
    stream.once('drain',writeToStream()); 
    } 
} 

我需要每次寫入完成時調用其他方法。如何才能做到這一點。

回答

6

從Node.js的WritableStream.write(...) documentation你可以給「寫入」方法被調用時,寫入的數據被刷新回調:

var stream = fs.createWriteStream('myFile.txt', {flags: 'a'}); 
var data = "Hello, World!\n"; 
stream.write(data, function() { 
    // Now the data has been written. 
}); 

請注意,你可能並不需要真正等待每個在排隊等待下一個呼叫之前呼叫「寫入」完成。即使「write」方法返回false,您仍然可以調用後續寫入,並且節點會將掛起的寫入請求緩存到內存中。

+0

什麼標誌:a呢? –

+0

flags:表示追加,請參閱fs文檔 - https://nodejs.org/api/fs.html –

1

我正在使用maerics的答案以及錯誤處理。標記'a'用於打開要附加的文件。如果該文件不存在,則會創建該文件。有其他flags你可以使用。

// Create a writable stream & Write the data to stream with encoding to be utf8 
    var writerStream = fs.createWriteStream('MockData/output.txt',{flags: 'a'}) 
         .on('finish', function() { 
           console.log("Write Finish."); 
          }) 
         .on('error', function(err){ 
          console.log(err.stack); 
          }); 


    writerStream.write(outPutData,function() { 
     // Now the data has been written. 
     console.log("Write completed."); 
    }); 

    // Mark the end of file 
    writerStream.end();