【问题标题】:Node js- writing data to the writable streamNode js-将数据写入可写流
【发布时间】:2013-10-03 19:05:09
【问题描述】:

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

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

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    从 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,您仍然可以调用后续写入,并且节点会将待处理的写入请求缓冲到内存中。

    【讨论】:

    • flags:a 做什么?
    • flags: a 表示追加,参见 fs 文档 - nodejs.org/api/fs.html
    • 你说 Node.js 会在内存中缓冲挂起的写请求。不,不会,不会一直如此。如果你对流的写入足够多,当内存缓冲区已满时,Node.js 将开始丢弃数据。
    【解决方案2】:

    我正在使用 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2018-10-09
      相关资源
      最近更新 更多