在Node中如何使用可写流在循环中顺序写入流?

5
我希望能通过循环在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...等等。 我的理解是outfile.write 是异步的,这意味着可能会导致文件无序写入——这是正确的吗?
我从Node文档中看到:

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

所以我认为使用流是最好的选择,但是,我不确定如何在进行循环中的下一次迭代之前保证数据块已经成功写入。 我应该如何做?谢谢。
2个回答

0

我认为在当前的流和2015年的流中,写操作从未是异步并行的。写入流在内存中具有缓冲区,您将数据写入该缓冲区而不是直接写入硬盘。缓冲区将保持您的顺序正确。


-3

您可以通过使用fs.writeSync来避免使用fs.createWriteStream,因为它不像fs.write那样存在回调问题。


我不喜欢这个,因为代码是同步和阻塞的性质。 - Startec
在您的情况下,根据问题的定义,阻塞是所需的。 - Rūdolfs Vikmanis
@RūdolfsVikmanis,Writable对象被设计用于编写顺序数据。这就是为什么它被称为“流”,所以当你可以利用流功能时使用writeSync()是愚蠢的。 - Nulik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接