Node.js Stream readable.readableFlowing 属性

2025年2月22日 | 阅读 4 分钟

在本文中,我们将讨论 Node.js 中的 Stream readable.readableFlowing() 属性,包括其语法、参数和示例。

Node.js Stream readable.readableFlowing() 属性是什么?

在 Node.js 中,一个名为 "readable.readableFlowing" 的布尔属性用于确定一个可读流是否处于流动模式。在流动模式下,当数据可用时,它会被自动从流中读取并发送到 data 事件处理程序。如果 "readable.readableFlowing" 为 null,则没有设置机制来使用流中的数据。当条件为 true 时,数据会流动;当条件为 false 时,流将被暂停。通过控制此属性,开发人员可以有效地处理异步 I/O 操作,从而控制从流中消耗数据的方式。

语法

它具有以下语法:

参数

  • Readable: 一个 Readable 流实例。
  • ReadableFlowing: 一个可读流实例的布尔属性。

可能的值

  • Null: 未指定消耗数据的方法,流处于暂停状态。
  • True: 流处于流动模式,它会立即读取并发出可用数据。
  • False: 数据可供读取,但除非明确请求,否则不会读取,因为流已暂停。

如果 "readable.readableFlowing" 为 "null",则流当前不处于流动模式。此时它既不暂停也不主动流动。通常,在实现任何数据消耗机制之前,流会处于此状态。

"readable.readableFlowing" 为 "true" 时,表示流处于流动模式。在此模式下,一旦有新数据可用,它就会被自动从底层源读取并发送给用户。当事件监听器连接到流时,例如 'data' 事件,这是默认行为。

另一方面,当 "readable.readableFlowing" 为 "false" 时,流将被暂停。在这种情况下,数据不会自动发出,但仍然可以从流中读取。相反,用户必须通过恢复流或使用 read() 等方法明确请求数据。

示例 1

让我们举一个例子来说明 Node.js Stream readable.readableFlowing() 属性。

输出

 
true
Received: Hii, 
Received: world!!   

说明

在此示例中,使用 "stream.Readable" 类初始化一个可读流。通过覆盖流的 _read 方法将数据块推入流中。每当数据可供读取时,都会通过配置为监听 data 事件的事件监听器激活回调函数。当第一次测试 readableFlowing 属性时,它返回 null,因为尚未配置任何数据消耗机制。但是,由于存在 data 事件监听器,流会立即切换到流动模式,并在数据可用时立即发出。此示例展示了流的状态(无论其是否处于流动模式)如何反映在 readableFlowing 属性中,以及事件监听器如何影响流的行为。

示例 2

让我们再举一个例子来说明 Node.js Stream readable.readableFlowing() 属性。

输出

 
null
false   

说明

此代码演示了在 Node.js 可读流中使用 readable.readableFlowing 属性。首先,使用创建流的自定义 _read 方法将数据推入可读流。检查 readableFlowing 属性后,返回 null,这表示流当前不处于流动模式。之后,使用 pause() 方法显式暂停流。接下来,当再次检查 readableFlowing 属性并返回 false 时,可以确认流处于暂停模式。最后一个语句表明由于流已暂停,数据不会自动发出。此示例展示了该属性如何控制流的流动模式,使开发人员能够根据其需求定制数据消耗行为。