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① |
浏览器兼容性
加载中…