ReadableStreamBYOBRequest: respondWithNewView() 方法
注意:此功能在 Web Workers 中可用。
ReadableStreamBYOBRequest 介面的 respondWithNewView() 方法指定了一個新的檢視,供關聯的可讀位元組流的消費者寫入,而不是使用 ReadableStreamBYOBRequest.view。
新檢視必須是一個 TypedArray 或 DataView,它提供了一個指向與 ReadableStreamBYOBRequest.view 相同後備記憶體區域的檢視。呼叫此方法後,傳入方法中的檢視將被轉移,並且不再可修改。
該方法用於底層位元組源在完成響應之前需要將 byobRequest.view 內部轉移的用例。例如,源可能將 BYOB 檢視轉移到一個單獨的工作執行緒,並在工作執行緒完成填充後等待其傳回。
語法
respondWithNewView(view)
引數
view-
一個
TypedArray或DataView,供關聯的可讀位元組流的消費者寫入,而不是使用ReadableStreamBYOBRequest.view。它必須是一個指向與
ReadableStreamBYOBRequest.view相同後備記憶體區域的檢視,並且佔用相同或更少的記憶體。具體來說,它必須是檢視的緩衝區或一個已轉移的版本,必須具有相同的byteOffset,並且byteLength(寫入的位元組數)小於或等於檢視的byteLength。
返回值
無(undefined)。
異常
TypeError-
如果源物件不是
ReadableStreamBYOBRequest,或者沒有關聯的控制器,或者關聯的內部陣列緩衝區不存在或已分離,則會丟擲此異常。如果當有活動讀取器時view的長度為零,或者在已關閉的流上呼叫時view的長度非零,也可能丟擲此異常。 RangeError-
如果新
view與ReadableStreamBYOBRequest.view的後備記憶體區域不匹配,則會丟擲此異常。例如,它不是同一個緩衝區(或已轉移的版本),具有不同的byteOffset,或者比後備檢視可用的記憶體更大。
示例
要轉移的檢視必須與 ReadableStreamBYOBRequest.view 的型別相同,具有相同的底層緩衝區和位元組偏移量,並且 byteLength 相同或更小。
例如,我們可以定義檢視並按如下方式響應
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① |
瀏覽器相容性
載入中…