检查NodeJS ClearTextStream流是否“已结束”?

时间:2014-03-05 13:16:27

标签: node.js stream

我有一个用于TLS连接的ClearTextStream,我想检查是否已经调用了“end”。实际问题是,我正在尝试将某些内容写入流中,并且出现“写入结束”错误。

现在要避免这种情况,我只想检查是否已经调用了“end”。我确实有一个“关闭”事件,但在所有情况下都没有被解雇。

我无法在documentation中找到它,而且我无法通过Google搜索找到类似内容。

我可以检查错误事件(这对我来说是“写完后”)并处理那里的情况 - 但是真的没有办法在开始时检查这个吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您收到write after end错误,则表示您正在尝试将数据写入已关闭的Writable流(即,不能接受任何输入数据)。当可写流关闭时,会发出finish事件(请参阅the documentation)。另一方面,close事件由Readable流发出,当底层资源关闭时(例如,当您正在读取的文件描述符被关闭时)。

由于ClearTextStreamDuplex流,它可以同时发出closefinish个事件,但它们并不意味着相同的事情。在您的特定情况下,您应该听取finish事件并做出适当的反应。

另一个解决方案是检查this.endedthis.finished布尔值(请参阅the source code),但我不建议这样做,因为它们是私有变量,只反映实现细节,而不是公共API。