【问题标题】:How to sequentially write a stream in Node in a loop with writeable Streams?如何在具有可写流的循环中按顺序在 Node 中写入流?
【发布时间】:2016-02-19 16:08:39
【问题描述】:

我想通过循环以特定顺序在 Node 中将行追加到文件中,该文件是可写流。

这是我所说的简化版本:

var fs = require('fs');
var outfile = fs.createWriteStream('outfile.txt');

for (var i = 0; i < 200; i++) {
    outfile.write('i', function (err, len) {
        console.log('written');
    });
}

我需要按顺序写入文件,这意味着它将按顺序写入12345...etc。我的理解是 outfile.write 是异步的,这意味着文件可能被乱序写入 - 这是正确的吗?

我从节点文档中看到

请注意,在同一个文件上多次使用 fs.write 而不等待回调是不安全的。对于这种情况,强烈建议使用 fs.createWriteStream。

所以我相信使用流是最好的,但是,我不确定在继续循环中的下一个迭代之前保证数据块已成功写入。我该怎么做呢?谢谢。

【问题讨论】:

    标签: node.js stream fs


    【解决方案1】:

    您可以通过使用fs.writeSync 来避免使用fs.createWriteStream,它没有像fs.write 这样的回调问题

    【讨论】:

    • 我不喜欢这个,因为代码的同步和阻塞特性。
    • 在您的场景中,阻塞是问题定义所需要的。
    • @RūdolfsVikmanis,Writable 对象专为写入顺序数据而设计。这就是为什么它被称为stream,所以当你可以利用流功能时使用 writeSync() 是愚蠢的。
    【解决方案2】:

    我认为对于当前的流和 2015 年的流,写入从来都不是异步并行的。写入流在内存中有一个缓冲区,您写入该缓冲区而不是直接写入硬盘。缓冲区将使您的序列保持正确的顺序。

    【讨论】:

      猜你喜欢
      • 2014-11-05
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2019-08-16
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多