バイトデータの読み取り可能なストリームを表します。→●、MS
Streams API の ReadableStream インターフェイス。
Fetch API は、Response オブジェクトの body プロパティを介して ReadableStream の具体的なインスタンスを提供します。
当のストリームを非同期的に反復する間は、他の消費器が読み取り器を獲得できないよう、ストリームはロックされることになる。このロックは、非同期反復子の return() メソッドが call されたとき、解放されることになる ― 例: for ループから break して出ることにより。
既定では、非同期反復子の return() メソッドを call すると、当のストリームも取り消すことになる。これを防止するには、ストリームの values() メソッドを ― その preventCancel オプションに true を渡して ― 利用する。
転送されたストリームは、元のストリームとまったく同じに利用できる。以降、元のストリームはロックされ,利用不能になる。
¶他を省く
これは Uint8Array と組み合わせた 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" } });
});
| 表示内容: |
| 表示内容: |