ReadableStreamBYOBRequest: respondWithNewView() メソッド

respondWithNewView()ReadableStreamBYOBRequest インターフェイスのメソッドで、 ReadableStreamBYOBRequest.view の代わりに、関連付けられた読み取り可能なバイトストリームの消費者が書き込むべき新しいビューを指定します。

新しいビューは TypedArray または DataView でなければならず、 ReadableStreamBYOBRequest.view と同じバッキングメモリー領域にビューを提供します。 このメソッドが呼び出された後、メソッドに渡されたビューは移譲され、変更できなくなりました。

このメソッドは、バイト基盤がレスポンスを完了する前に byobRequest.view を内部的に移譲する必要がある使用する用途を意図しています。 例えば、 BYOB ソースは BYOB ビューを別個のワーカースレッドに移譲し、それが満たされたらワーカがそれを移譲し返すのを待つことができます。

構文

js
respondWithNewView(view)

引数

view

関連付けられた読み取り可能なバイトストリームの消費者が ReadableStreamBYOBRequest.view の代わりに書くべき TypedArray または DataView です。

これは ReadableStreamBYOBRequest.view と同じバッキングメモリー領域上のビューでなければならず、占めるメモリーは同じかそれ以下でなければなりません。 具体的には、ビューのバッファーか移譲されたもので、同じ byteOffset を保有し、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),
);

仕様書

Specification
Streams Standard
# ref-for-rs-byob-request-respond-with-new-view①

ブラウザーの互換性

BCD tables only load in the browser

関連情報