--- title: ReadableStream slug: Web/API/ReadableStream tags: - API - Fetch - Fetch API - Files - HTTP - Interface - Networking - ReadableStream - Reference - Streams - data translation_of: Web/API/ReadableStream ---
{{APIRef("Streams")}}
Streams API の ReadableStream
インターフェイスは、バイトデータの読み取り可能なストリームを表します。 Fetch API は、{{domxref("Response")}} オブジェクトの {{domxref("Body.body", "body")}} プロパティを介して ReadableStream
の具体的なインスタンスを提供します。
locked
ゲッターは、読み取り可能なストリームがリーダーにロックされている(英語)かどうかを返します。reason
引数は、基になるソースに与えられ、使用する場合と使用しない場合があります。ReadableStream
を特定の {{domxref("WritableStream")}} にパイプし、パイピングプロセスが正常に完了したときに満たす promise を返します。 エラーが発生した場合は拒否します。tee
メソッドは、この読み取り可能なストリームを tee し、結果の2つの分岐を含む2要素配列を新しい {{domxref("ReadableStream")}} インスタンスとして返します。 これらの各ストリームは、同じ着信データを受信します。次の例では、別のリソースからフェッチした HTML の断片をブラウザーにストリーミングするために、人工的な {{domxref("Response")}} が作成されます。
これは {{domxref("Uint8Array")}} と組み合わせた {{domxref("ReadableStream")}} の使用方法を示しています。
fetch("https://www.example.org/").then((response) => { const reader = response.body.getReader(); const stream = new ReadableStream({ start(controller) { // 次の関数は各データチャンクを処理します function push() { // done は Boolean で、value は Uint8Array です reader.read().then(({ done, value }) => { // 読み取るデータはもうありませんか? if (done) { // データの送信が完了したことをブラウザーに伝えます controller.close(); return; } // データを取得し、コントローラー経由でブラウザーに送信します controller.enqueue(value); push(); }); }; push(); } }); return new Response(stream, { headers: { "Content-Type": "text/html" } }); });
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('Streams','#rs-class','ReadableStream')}} | {{Spec2('Streams')}} | 初期定義 |
{{Compat("api.ReadableStream")}}