ReadableByteStreamController
注意:此功能在 Web Workers 中可用。
ReadableByteStreamController 介面是 Streams API 的一部分,代表一個 可讀位元組流 的控制器。它允許控制帶有底層位元組源的 ReadableStream 的狀態和內部佇列,並在流的內部佇列為空時,實現從底層源到消費者的零複製高效資料傳輸。
當向 ReadableStream() 建構函式 傳遞一個具有 type="bytes" 屬性的 underlyingSource 物件作為引數時,會建立一個此控制器型別的例項。underlyingSource 物件還可以定義 start() 和 pull() 回撥函式。這些函式將以控制器作為引數進行呼叫,用於設定底層源並在需要時請求資料。
底層源透過其 byobRequest 屬性或 enqueue() 方法使用控制器向流提供資料。byobRequest 是一個 ReadableStreamBYOBRequest 物件,表示消費者正在請求將資料直接進行零複製傳輸到消費者。如果 byobRequest 存在,則必須使用它來複制資料(在這種情況下不要使用 enqueue())!如果底層源需要將資料傳遞給流,並且 byobRequest 為 null,則源可以呼叫 enqueue() 將資料新增到流的內部佇列中。
請注意,byobRequest 僅在有讀取器請求且流的內部佇列為空的“BYOB 模式”下建立。“BYOB 模式”在透過 ReadableStreamBYOBReader(通常透過呼叫 ReadableStream.getReader() 並傳入 { mode: 'byob' } 引數來構造)使用時啟用。當使用預設讀取器並在 ReadableStream() 建構函式 中指定了 autoAllocateChunkSize 時,也會啟用“BYOB 模式”。
底層位元組源還可以使用控制器在所有資料傳送完畢後 close() 流,並使用 error() 報告底層源的錯誤。控制器中的 desiredSize 屬性用於應用“背壓”,告知底層源內部佇列的大小(較小的值表示佇列正在填滿,提示底層源暫停或限制流入是可取的)。
請注意,儘管控制器主要由底層位元組源使用,但沒有任何理由不能將其儲存並由系統的其他部分使用來訊號化流。
建構函式
無。如果將具有 type="bytes" 屬性的 underlyingSource 傳遞給 ReadableStream() 建構函式,則會自動建立 ReadableByteStreamController 例項。
例項屬性
ReadableByteStreamController.byobRequest只讀-
返回當前的 BYOB 拉取請求,如果沒有待處理的請求則返回
null。 ReadableByteStreamController.desiredSize只讀-
返回填充流內部佇列所需的期望大小。
例項方法
ReadableByteStreamController.close()-
關閉關聯的流。
ReadableByteStreamController.enqueue()-
將給定的資料塊新增到關聯的流中。
ReadableByteStreamController.error()-
導致與關聯流的任何未來互動都發生錯誤。
示例
控制器由底層源用於傳輸或入隊資料,以指示流沒有更多資料(已關閉)或發生錯誤。它還用於使用 desiredSize 從“上游”向底層源發出期望資料速率的訊號。
在 使用可讀位元組流 中的示例,特別是 建立可讀套接字推送位元組流,展示了這些情況的大部分。
規範
| 規範 |
|---|
| Streams # rbs-controller-class |
瀏覽器相容性
載入中…