web-dev-qa-db-ja.com

Node js-書き込み可能なストリームへのデータの書き込み

私のノードアプリケーションでは、createWriteStreamメソッドのwriteメソッドを使用してファイルにデータを書き込んでいます。次に、特定のストリームの書き込みが完了したかどうかを確認する必要があります。これを見つけるにはどうすればよいですか。

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());
  }
}

書き込みが完了するたびに他のメソッドを呼び出す必要があります。これを行うにはどうすればよいですか。

13
sachin

Node.jsから WritableStream.write(...) documentation 「write」メソッドに、書き込まれたデータがフラッシュされたときに呼び出されるコールバックを与えることができます。

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を返した場合でも、後続の書き込みを呼び出すことができ、ノードは保留中の書き込み要求をメモリにバッファリングします。

10
maerics

私はエラー処理と一緒にmaericsの答えを使用しています。フラグ'a'は、追加するファイルを開くために使用されます。ファイルが存在しない場合は作成されます。その他 フラグ 使用できます。

// 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();
3
Hitesh Sahu