WritableStreamDefaultWriter
Примечание: Эта функция доступна в Веб-воркерах.
Интерфейс WritableStreamDefaultWriter из API потоков — это объект, возвращаемый WritableStream.getWriter(), и после его создания писатель блокируется на WritableStream, гарантируя, что никакие другие потоки не смогут писать в подлежащий приемник.
Конструктор
WritableStreamDefaultWriter()-
Создаёт новый экземпляр объекта
WritableStreamDefaultWriter.
Свойства экземпляра
-
WritableStreamDefaultWriter.closedТолько для чтения -
Позволяет писать код, реагирующий на завершение процесса потоковой передачи. Возвращает промис, который выполняется, если поток закрыт, или отклоняется, если поток имеет ошибку или блокировка писателя снята.
-
WritableStreamDefaultWriter.desiredSizeТолько для чтения -
Возвращает необходимый размер для заполнения внутренней очереди потока.
-
WritableStreamDefaultWriter.readyТолько для чтения -
Возвращает
Promise, который разрешается, когда желаемый размер внутренней очереди потока переходит от неположительного к положительному, сигнализируя о том, что обратная задержка больше не применяется.
Методы экземпляра
WritableStreamDefaultWriter.abort()-
Прерывает поток, сигнализируя о том, что производитель больше не может успешно записать в поток, и он должен быть немедленно переведён в состояние ошибки, при этом все записанные в очередь данные будут отброшены.
WritableStreamDefaultWriter.close()-
Закрывает связанный поток записи.
WritableStreamDefaultWriter.releaseLock()-
Освобождает блокировку писателя для соответствующего потока. После освобождения блокировки писатель больше не активен. Если связанный поток имеет ошибку, когда блокировка освобождается, писатель будет отображаться как имеющий ошибку и далее; в противном случае писатель будет отображаться как закрытый.
WritableStreamDefaultWriter.write()-
Записывает переданный фрагмент данных в
WritableStreamи его подлежащий приемник, а затем возвращаетPromise, который разрешается, чтобы указать успех или неудачу операции записи.
Примеры
В следующем примере показано создание WritableStream с настраиваемым приемником и стратегией очереди, предоставляемой API. Затем вызывается функция sendMessage(), передавая созданный поток и строку. Внутри этой функции вызывается метод потока getWriter(), который возвращает экземпляр WritableStreamDefaultWriter. Вызов forEach() используется для записи каждого фрагмента строки в поток. Наконец, write() и close() возвращают промисы, которые обрабатываются для обработки успешного или неудачного завершения фрагментов и потоков.
const list = document.querySelector("ul");
async function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message);
try {
for (const chunk of encoded) {
await defaultWriter.ready;
await defaultWriter.write(chunk);
console.log("Chunk written to sink.");
}
// Call ready again to ensure that all chunks are written
// before closing the writer.
await defaultWriter.ready;
await defaultWriter.close();
console.log("All chunks written");
} catch (err) {
console.log("Error:", err);
}
}
const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
{
// Implement the sink
write(chunk) {
return new Promise((resolve, reject) => {
const buffer = new ArrayBuffer(1);
const view = new Uint8Array(buffer);
view[0] = chunk;
const decoded = decoder.decode(view, { stream: true });
const listItem = document.createElement("li");
listItem.textContent = `Chunk decoded: ${decoded}`;
list.appendChild(listItem);
result += decoded;
resolve();
});
},
close() {
const listItem = document.createElement("li");
listItem.textContent = `[MESSAGE RECEIVED] ${result}`;
list.appendChild(listItem);
},
abort(err) {
console.log("Sink error:", err);
},
},
queuingStrategy,
);
sendMessage("Hello, world.", writableStream);
Полный код можно найти в нашем примере простого писателя.
Спецификации
| Спецификация |
|---|
| Потоки # default-writer-class |
Совместимость с браузерами
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
WritableStreamDefaultWriter |
78 | 79 | 100 | 65 | 14.1 | 78 | 100 | 56 | 14.5 | 12.0 | 78 |
WritableStreamDefaultWriter |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
abort |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
close |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
closed |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
desiredSize |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
ready |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
releaseLock |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
write |
59 | 16 | 100 | 46 | 14.1 | 59 | 100 | 43 | 14.5 | 7.0 | 59 |
© 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/WritableStreamDefaultWriter