A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/API/ReadableStreamBYOBReader below:

ReadableStreamBYOBReader - Web API | MDN

以下の例は、読み取り可能なバイトストリームの使用から取ったものです。

まず、ストリーム上で ReadableStream.getReader() を使用してリーダーを作成します。 options 引数に mode: "byob" を指定します。 これは "Bring Your Own Buffer" リーダーなので、読み込むための ArrayBuffer も作成する必要があります。

const reader = stream.getReader({ mode: "byob" });
let buffer = new ArrayBuffer(4000);

リーダーを使用する関数を下記に示します。 これは read() メソッドを再帰的に呼び出して、データをバッファーに読み込みます。 このメソッドは Uint8Array 型付き配列を取り、これが これは、元の配列バッファーでまだ書き込まれていない部分のビューです。 ビューの引数は、前回呼び出された際に受け取ったデータから計算され、元配列バッファーへのオフセットを定義します。

readStream(reader);

function readStream(reader) {
  let bytesReceived = 0;
  let offset = 0;

  while (offset < buffer.byteLength) {
    // read() returns a promise that resolves when a value has been received
    reader
      .read(new Uint8Array(buffer, offset, buffer.byteLength - offset))
      .then(function processBytes({ done, value }) {
        // Result objects contain two properties:
        // done - true if the stream has already given all its data.
        // value - some data. Always undefined when done is true.

        if (done) {
          // There is no more data in the stream
          return;
        }

        buffer = value.buffer;
        offset += value.byteLength;
        bytesReceived += value.byteLength;

        // Read some more, and call this function again
        return reader
          .read(new Uint8Array(buffer, offset, buffer.byteLength - offset))
          .then(processBytes);
      });
  }
}

ストリームにデータがなくなると、read()メソッドはプロパティ done を true に設定したオブジェクトで解決し、関数を返します。

ReadableStreamBYOBReader.closed プロパティはプロミスを返し、ストリームが閉じられたり、エラーとされたり、リーダーロックが解放されたりすることを監視するために使用することができます。

reader.closed
  .then(() => {
    // Resolved - code to handle stream closing
  })
  .catch(() => {
    // Rejected - code to handle error
  });

ストリームを取り消すには ReadableStreamBYOBReader.cancel() を呼び出します。オプションで理由を指定します。 これは、ストリームが取り消される可能性を解決するプロミスを返します。 ストリームがキャンセルされると、コントローラは次に cancel() を基盤となるソース上で呼び出します。

読み取り可能なバイトストリームの使用の例では、次のようにボタンが押されたときに cancel メソッドを呼び出します。

button.addEventListener("click", () => {
  reader.cancel("user choice").then(() => console.log("cancel complete"));
});

コンシューマーは releaseLock() を呼び出して、ストリーム上のリーダーの保持を解放することもできますが、これは読み込みが待機していない場合に限られます。


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4