Node.js WriteStream同步

时间:2014-06-28 16:32:00

标签: javascript node.js

我正在node.js中编写一个纯同步的单线程命令行程序,它需要编写一个二进制文件,我正在使用WriteStream。我的使用模式如下:

var stream = fs.createWriteStream(file)
stream.write(buf1)
stream.write(buf2)

这似乎有效,但文档说它是异步的,我想确保我不会编写99%的时间都能运行的代码。我不关心数据何时被写入,只要它以指定的顺序写入并且不晚于程序退出时,并且数据量很小,因此速度和内存消耗不是问题。

我已经看到了stream.end()的提及,但它似乎没有它,我也看到了一些建议,如果你不使用回调,调用它可能实际上是一个坏主意,因为它可能最终得到在编写所有数据之前调用。

我的方法是否正确(假设我想要纯粹同步)或者我需要注意什么?

2 个答案:

答案 0 :(得分:4)

您可以这样做,唯一的问题可能是如果为同一路径创建两个或更多并发流:来自不同流的写入顺序将是未定义的。顺便说一句,节点中有一个同步fs写流实现:fs.SyncWriteStream。它是私有的,需要fd作为参数,但如果你真的想要它......

答案 1 :(得分:0)

我正在研究对时间要求严格的API,在该API中,必须先编写一个新文件,并完全处理其流,然后才能执行下一个操作。在我的情况下(很可能是OP的问题),解决方案是使用:

writer.on('finish', () => {
 console.error('All writes are now complete.');
});

按照fs Event: 'finish' documentation