WritableStreamDefaultWriter: метод close()
Примечание: Эта функция доступна в Веб-воркерах.
Метод close() интерфейса WritableStreamDefaultWriter закрывает связанный с ним поток записи.
Подлежащий обработке приемник завершит обработку всех ранее записанных фрагментов перед вызовом поведения закрытия. В это время любые последующие попытки записи будут неуспешными (без ошибок для потока).
Синтаксис
close()
Параметры
Нет.
Возвращаемое значение
Объект Promise, который выполняется со значением undefined , если все оставшиеся фрагменты были успешно записаны перед закрытием, или отклоняется с ошибкой, если в процессе возникла проблема.
Исключения
TypeError-
Поток, который вы пытаетесь закрыть, не является
WritableStream.
Примеры
В следующем примере показано создание WritableStream с пользовательским приемником и стратегией очереди, предоставляемой API. Затем вызывается функция под названием sendMessage(), передавая ей только что созданный поток и строку. Внутри этой функции вызывается метод потока getWriter(), который возвращает экземпляр WritableStreamDefaultWriter. Каждый фрагмент закодированной строки записывается в поток с помощью метода write(), а метод forEach() закодированного Uint8Array используется для обработки его байт за байтом. Наконец, вызывается close() , и возвращаемый им Promise обрабатывается для обработки успешного (или любых ошибок) выполнения операций по поблочной записи.
const list = document.querySelector("ul");
function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message);
encoded.forEach((chunk) => {
defaultWriter.ready
.then(() => {
defaultWriter.write(chunk);
})
.then(() => {
console.log("Chunk written to sink.");
})
.catch((err) => {
console.log("Chunk error:", err);
});
});
// Call ready again to ensure that all chunks are written
// before closing the writer.
defaultWriter.ready
.then(() => {
defaultWriter.close();
})
.then(() => {
console.log("All chunks written");
})
.catch((err) => {
console.log("Stream 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);
Вы можете посмотреть демонстрацию этого примера на нашем примере простого записи.
Спецификации
| Спецификация |
|---|
| Потоки # ref-for-default-writer-close⑦ |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
close |
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/close