Поток чтения: метод 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 |
См. также
© 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