ReadableStreamBYOBRequest: respondWithNewView() 方法
注意:此功能在 Web 工作线程 中可用。
respondWithNewView()
方法是 ReadableStreamBYOBRequest
接口的一部分,它指定了与关联的可读字节流的使用者应写入的新的视图,而不是 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
在有活动阅读器时长度为零,或者在已关闭的流上调用时长度不为零,则也会抛出此异常。 RangeError
-
如果新的
view
与ReadableStreamBYOBRequest.view
的底层内存区域不匹配,则抛出此异常。例如,它不是同一个缓冲区(或其转移版本),具有不同的byteOffset
,或者大于底层视图可用的内存。
示例
要转移的视图必须与 ReadableStreamBYOBRequest.view
类型相同,具有相同的底层缓冲区和字节偏移量,并且字节长度相同或更小。
例如,我们可以像下面这样定义视图并进行响应
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 表仅在浏览器中加载