ReadableStreamBYOBRequest: respondWithNewView() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能在 Web Workers 中可用。

ReadableStreamBYOBRequest 介面的 respondWithNewView() 方法指定了一個新的檢視,供關聯的可讀位元組流的消費者寫入,而不是使用 ReadableStreamBYOBRequest.view

新檢視必須是一個 TypedArrayDataView,它提供了一個指向與 ReadableStreamBYOBRequest.view 相同後備記憶體區域的檢視。呼叫此方法後,傳入方法中的檢視將被轉移,並且不再可修改。

該方法用於底層位元組源在完成響應之前需要將 byobRequest.view 內部轉移的用例。例如,源可能將 BYOB 檢視轉移到一個單獨的工作執行緒,並在工作執行緒完成填充後等待其傳回。

語法

js
respondWithNewView(view)

引數

view

一個 TypedArrayDataView,供關聯的可讀位元組流的消費者寫入,而不是使用 ReadableStreamBYOBRequest.view

它必須是一個指向與 ReadableStreamBYOBRequest.view 相同後備記憶體區域的檢視,並且佔用相同或更少的記憶體。具體來說,它必須是檢視的緩衝區或一個已轉移的版本,必須具有相同的 byteOffset,並且 byteLength(寫入的位元組數)小於或等於檢視的 byteLength

返回值

無(undefined)。

異常

TypeError

如果源物件不是 ReadableStreamBYOBRequest,或者沒有關聯的控制器,或者關聯的內部陣列緩衝區不存在或已分離,則會丟擲此異常。如果當有活動讀取器時 view 的長度為零,或者在已關閉的流上呼叫時 view 的長度非零,也可能丟擲此異常。

RangeError

如果新 viewReadableStreamBYOBRequest.view 的後備記憶體區域不匹配,則會丟擲此異常。例如,它不是同一個緩衝區(或已轉移的版本),具有不同的 byteOffset,或者比後備檢視可用的記憶體更大。

示例

要轉移的檢視必須與 ReadableStreamBYOBRequest.view 的型別相同,具有相同的底層緩衝區和位元組偏移量,並且 byteLength 相同或更小。

例如,我們可以定義檢視並按如下方式響應

js
const v = controller.byobRequest.view;
bytesRead = socket.readInto(v.buffer, v.byteOffset, v.byteLength);
byobRequest.respondWithNewView(
  byobRequest.view.subarray(v.byteOffset, bytesRead),
);

規範

規範
Streams
# ref-for-rs-byob-request-respond-with-new-view①

瀏覽器相容性

另見