ReadableStream: ReadableStream() コンストラクター
ReadableStream()
コンストラクターは、指定されたハンドラーから読み取り可能なストリームのオブジェクトを作成して返します。
すべての引数は技術的にオプションですが、 underlyingSource
を省略すると、ソースを持たないストリームになり、そこから読み込むことができなくなることに注意してください(リーダーは決して解決されないプロミスを返します)。
構文
new ReadableStream()
new ReadableStream(underlyingSource)
new ReadableStream(underlyingSource, queuingStrategy)
引数
underlyingSource
省略可-
構築されたストリームのインスタンスの動作を定義するメソッドとプロパティを含むオブジェクト。
underlyingSource
には次のものを含めることができます。start
(controller) 省略可-
これは、オブジェクトが構築されるとすぐに呼び出されるメソッドです。 このメソッドの内容は開発者が定義し、ストリームのソースへのアクセスを取得し、ストリーム機能を設定するために必要な他のすべての操作を行う必要があります。 このプロセスを非同期で実行する場合、成功または失敗を通知するプロミスを返すことができます。このメソッドに渡される
controller
引数は、ReadableStreamDefaultController
またはReadableByteStreamController
をtype
プロパティの値に応じて指定します。開発者はこれを使用して、セットアップ中にストリームを制御できます。 pull
(controller) 省略可-
このメソッドは、開発者が定義し、ストリームの内部にあるチャンクのキューがいっぱいになっていない場合、最高水準点に達するまで繰り返し呼び出されます。
pull()
がプロミスを返す場合、そのプロミスが満たされるまで再び呼び出されません。プロミスが拒否された場合、ストリームはエラーになります。このメソッドに渡されるcontroller
引数は、ReadableStreamDefaultController
またはReadableByteStreamController
をtype
プロパティの値に応じて指定します。開発者はこれを使用して、より多くのチャンクが読み取られるようストリームを制御できます。この関数はstart()
が完全に終了するまで呼び出されません。さらに、この関数は少なくとも一つのチャンクがキューに入れられるか、BYOB リクエストが履行された場合にのみ繰り返し呼び出されます。 cancel
(reason) 省略可-
このメソッドは、開発者が定義し、ストリームがキャンセルされることをアプリが通知した場合に呼び出されます(例えば、
ReadableStream.cancel()
が呼び出された場合)。 内容は、ストリームのソースへのアクセスを解放するために必要なことを行う必要があります。 このプロセスが非同期の場合、成功または失敗を通知するプロミスを返すことができます。reason
引数には、ストリームがキャンセルされた理由を説明する文字列が含まれています。 type
省略可-
このプロパティは、どの種類の読み取り可能なストリームが処理されるかを制御します。
"bytes"
に設定された値が含まれている場合、渡されるコントローラーオブジェクトは、 BYOB (独自のバッファーを持ち込む)/バイトストリームを処理できるReadableByteStreamController
になります。 含まれていない場合、渡されるコントローラーはReadableStreamDefaultController
になります。 autoAllocateChunkSize
省略可-
バイトストリームの場合、開発者は
autoAllocateChunkSize
に正の整数値を設定して、ストリームの自動割り当て機能をオンにできます。 これを設定すると、ストリームの実装は、必要なときに自動的にReadableByteStreamController.byobRequest
に指定したサイズのビューバッファーを確保するようになります。既定の
ReadableStreamDefaultReader
でゼロコピー転送を使用するためには、この設定をしなければなりません。 設定されていない場合、既定のリーダーはデータをストリームしますが、ReadableByteStreamController.byobRequest
は常にnull
となり、コンシューマーへの転送はストリーム内のキューを経由しなければなりません。
queuingStrategy
省略可-
オプションでストリームのキューイング戦略を定義するオブジェクト。 これには次の 2 つの引数が必要です。
highWaterMark
-
負でない整数 — これは、バックプレッシャーが適用される前に内部キューに含めることができるチャンクの総数を定義します。
size(chunk)
-
引数
chunk
を含むメソッド — これは、各チャンクに使用するサイズをバイト単位で示します。
メモ: 独自のカスタム
queuingStrategy
を定義するか、このオブジェクト値にByteLengthQueuingStrategy
またはCountQueuingStrategy
のインスタンスを使用できます。queuingStrategy
が指定されていない場合、使用される既定値は、最高水準点が 1 のCountQueuingStrategy
と同じです。
返値
ReadableStream
オブジェクトのインスタンス。
例外
RangeError
-
指定された
type
値が、"bytes"
でもundefined
でもない場合に発生します。
例
次の単純な例では、コンストラクターを使用して独自の ReadableStream
を作成します(完全なコードについては、単純なランダムストリームの例を参照)。 start()
関数は、1 秒ごとにランダムなテキスト文字列を生成し、それをストリームのキューに入れます。 ReadableStream.cancel()
が何らかの理由で呼び出された場合、生成を停止するために cancel()
関数も提供します。
ボタンを押すと、生成を停止し、ReadableStreamDefaultController.close()
を使用してストリームを閉じ、ストリームからデータを読み取る別の関数を実行します。
const stream = new ReadableStream({
start(controller) {
interval = setInterval(() => {
let string = randomChars();
// ストリームに文字列を追加
controller.enqueue(string);
// それを画面に表示
let listItem = document.createElement("li");
listItem.textContent = string;
list1.appendChild(listItem);
}, 1000);
button.addEventListener("click", () => {
clearInterval(interval);
fetchStream();
controller.close();
});
},
pull(controller) {
// この例では実際には pull は必要ありません
},
cancel() {
// リーダーがキャンセルされた場合に呼び出されるため、
// 文字列の生成を停止する必要があります
clearInterval(interval);
},
});
仕様書
Specification |
---|
Streams Standard # ref-for-rs-constructor⑤ |
ブラウザーの互換性
BCD tables only load in the browser