Spec-Zone.ru › Web APIs

Поток чтения: метод getReader()

Примечание: Эта функция доступна в Веб-воркерах.

Метод getReader() интерфейса ReadableStream создаёт читателя и блокирует поток для него. Пока поток заблокирован, другой читатель не может быть получен, пока текущий не будет освобождён.

Синтаксис

getReader()
getReader(options)

Параметры

options Необязательно

Объект, содержащий следующие свойства:

mode Необязательно

Свойство, определяющее тип создаваемого читателя. Значения могут быть:

  • "byob", что приводит к созданию ReadableStreamBYOBReader, который может читать потоки байтов (потоки, поддерживающие передачу без копирования из базового источника байтов в читатель, когда внутренние буферы потока пусты).
  • undefined (или не указано вообще — это значение по умолчанию), что приводит к созданию ReadableStreamDefaultReader, который может читать отдельные куски из потока.

Возвращаемое значение

Объект ReadableStreamDefaultReader или ReadableStreamBYOBReader, в зависимости от значения mode.

Исключения

RangeError

Выбрасывается, если предоставленное значение режима не является "byob" или undefined.

TypeError

Выбрасывается, если поток, для которого вы пытаетесь создать читателя, уже заблокирован или не является ReadableStream. Это также выбрасывается, если запрашивается читатель BYOB, а контроллер потока не является ReadableByteStreamController (поток не был создан как базовый источник с type="bytes").

Примеры

В следующем простом примере предварительно созданный пользовательский ReadableStream считывается с помощью ReadableStreamDefaultReader, созданного с помощью getReader(). (см. наш Пример простого случайного потока для полного кода). Каждый кусок считывается последовательно и выводится на пользовательский интерфейс, до тех пор, пока поток не будет полностью прочитан. В этот момент мы завершаем рекурсивную функцию и выводим весь поток в другую часть пользовательского интерфейса.

function fetchStream() {
  const reader = stream.getReader();
  let charsReceived = 0;

  // read() returns a promise that resolves
  // when a value has been received
  reader.read().then(function processText({ done, value }) {
    // Result objects contain two properties:
    // done  - true if the stream has already given you all its data.
    // value - some data. Always undefined when done is true.
    if (done) {
      console.log("Stream complete");
      para.textContent = value;
      return;
    }

    // value for fetch streams is a Uint8Array
    charsReceived += value.length;
    const chunk = value;
    let listItem = document.createElement("li");
    listItem.textContent = `Received ${charsReceived} characters so far. Current chunk = ${chunk}`;
    list2.appendChild(listItem);

    result += chunk;

    // Read some more, and call this function again
    return reader.read().then(processText);
  });
}

Спецификации

Спецификация
Потоки
# ref-for-rs-get-reader⑤

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
getReader 43 14 65 30 10.1 43 65 30 10.3 4.0 43

См. также

  • ReadableStream() конструктор
  • ReadableStreamDefaultReader
  • ReadableStreamBYOBReader
  • Использование потоков чтения
  • Использование потоков чтения байтов

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/getReader

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API