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①

浏览器兼容性

另见