我正在node.js中编写一个纯同步的单线程命令行程序,它需要编写一个二进制文件,我正在使用WriteStream
。我的使用模式如下:
var stream = fs.createWriteStream(file)
stream.write(buf1)
stream.write(buf2)
这似乎有效,但文档说它是异步的,我想确保我不会编写99%的时间都能运行的代码。我不关心数据何时被写入,只要它以指定的顺序写入并且不晚于程序退出时,并且数据量很小,因此速度和内存消耗不是问题。
我已经看到了stream.end()
的提及,但它似乎没有它,我也看到了一些建议,如果你不使用回调,调用它可能实际上是一个坏主意,因为它可能最终得到在编写所有数据之前调用。
我的方法是否正确(假设我想要纯粹同步)或者我需要注意什么?
答案 0 :(得分:4)
您可以这样做,唯一的问题可能是如果为同一路径创建两个或更多并发流:来自不同流的写入顺序将是未定义的。顺便说一句,节点中有一个同步fs写流实现:fs.SyncWriteStream
。它是私有的,需要fd
作为参数,但如果你真的想要它......
答案 1 :(得分:0)
我正在研究对时间要求严格的API,在该API中,必须先编写一个新文件,并完全处理其流,然后才能执行下一个操作。在我的情况下(很可能是OP的问题),解决方案是使用:
writer.on('finish', () => {
console.error('All writes are now complete.');
});