16

在我的节点应用程序中,我使用 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());
  }
}

每次写入完成时我都需要调用其他方法。我该怎么做。

4

2 回答 2

19

从 node.jsWritableStream.write(...)文档中,您可以给“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,您仍然可以调用后续写入,并且节点会将挂起的写入请求缓冲到内存中。

于 2013-09-27T15:04:50.683 回答
6

我正在使用 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();
于 2017-05-17T06:16:19.823 回答