現在の読み取り可能なストリームをティーイングし、結果の2つの分岐を新しい ReadableStream インスタンスとして含む2要素配列を返します。→●、MS
これは、2つのリーダーがストリームを同時に、おそらく異なる速度で読み取ることができるようにする場合に便利です。例えば、サーバーから応答を取得してブラウザーにストリームしたいが、ServiceWorker キャッシュにもストリームしたい場合は、ServiceWorker でこれを行うことができます。 応答のボディを複数回使用することはできないため、これを行うには2つのコピーが必要です。
ストリームをキャンセルするには、結果の両方の分岐をキャンセルする必要があります。ストリームをティーイングすると、通常、その間はストリームがロックされ、他のリーダーがロックできなくなります。
2つの ReadableStream インスタンスを含む Array。
function teeStream() { const teedOff = stream.tee(); fetchStream(teedOff[0], list2); fetchStream(teedOff[1], list3); } function fetchStream(stream, list) { const reader = stream.getReader(); let charsReceived = 0; // read() は、値を受け取ったときに解決する promise を返します reader.read().then(function processText({ done, value }) { // 結果オブジェクトには2つのプロパティが含まれます。 // done - ストリームがすべてのデータを既に提供している場合は true。 // value - 一部のデータ。 done が true の場合、常に undefined。 if (done) { console.log("Stream complete"); return; } // フェッチしたストリームの値は Uint8Array です charsReceived += value.length; const chunk = value; let listItem = document.createElement('li'); listItem.textContent = 'Read ' + charsReceived + ' characters so far. Current chunk = ' + chunk; list.appendChild(listItem); // さらに読み、この関数を再度呼び出します return reader.read().then(processText); }); }
表示内容: |
表示内容: |