ReadableStreamBYOBRequest: respondWithNewView() 方法

注意:此功能在 Web 工作线程 中可用。

respondWithNewView() 方法是 ReadableStreamBYOBRequest 接口的一部分,它指定了与关联的可读字节流的使用者应写入的新的视图,而不是 ReadableStreamBYOBRequest.view

新视图必须是 TypedArrayDataView,它提供对与 ReadableStreamBYOBRequest.view 相同的底层内存区域的视图。在调用此方法后,传递到该方法的视图将被转移并且不再可修改。

该方法旨在用于底层字节源在完成其响应之前需要内部转移 byobRequest.view 的用例。例如,源可能会将 BYOB 视图转移到单独的工作线程,并在工作线程填充该视图后等待其将其转移回来。

语法

js
respondWithNewView(view)

参数

view

一个 TypedArrayDataView,关联的可读字节流的使用者应该写入它,而不是 ReadableStreamBYOBRequest.view

这必须是与 ReadableStreamBYOBRequest.view 相同的底层内存区域的视图,并且占用的内存相同或更少。具体来说,它必须是视图的缓冲区或其转移版本,必须具有相同的 byteOffset,并且 byteLength(写入的字节数)必须小于或等于视图的 byteLength

返回值

无 (undefined).

异常

TypeError

如果源对象不是 ReadableStreamBYOBRequest,或者没有关联的控制器,或者关联的内部数组缓冲区不存在或已分离,则抛出此异常。如果 view 在有活动阅读器时长度为零,或者在已关闭的流上调用时长度不为零,则也会抛出此异常。

RangeError

如果新的 viewReadableStreamBYOBRequest.view 的底层内存区域不匹配,则抛出此异常。例如,它不是同一个缓冲区(或其转移版本),具有不同的 byteOffset,或者大于底层视图可用的内存。

示例

要转移的视图必须与 ReadableStreamBYOBRequest.view 类型相同,具有相同的底层缓冲区和字节偏移量,并且字节长度相同或更小。

例如,我们可以像下面这样定义视图并进行响应

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

规范

规范
流标准
# ref-for-rs-byob-request-respond-with-new-view①

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅