Поток записи: метод close()
Примечание: Эта функция доступна в Потоках веб-работы.
Метод close() интерфейса WritableStream закрывает связанный поток. Все фрагменты, записанные до вызова этого метода, отправляются перед выполнением возвращённой промисы.
Это эквивалентно получению WritableStreamDefaultWriter с помощью getWriter(), вызову close() на нём.
Синтаксис
close()
Параметры
Нет.
Возвращаемое значение
Промис Promise, который выполняется с undefined, если все оставшиеся фрагменты были успешно записаны до закрытия, или отклоняется с ошибкой, если во время процесса возникла проблема.
Исключения
TypeError-
Поток, который вы пытаетесь закрыть, заблокирован.
Примеры
Следующий пример демонстрирует несколько особенностей WritableStream. Он показывает создание WritableStream с пользовательским приемником и стратегией очереди, предоставляемой API. Затем он вызывает функцию sendMessage(), передавая созданный поток и строку. Внутри этой функции он вызывает метод потока getWriter(), который возвращает экземпляр WritableStreamDefaultWriter. Вызов forEach() используется для записи каждого фрагмента строки в поток. Наконец, write() и close() возвращают промисы, которые обрабатываются для обработки успешного или неудачного завершения фрагментов и потоков. Обратите внимание, что для возможности вызова close() самого потока, писатель должен быть отключён с помощью defaultWriter.releaseLock();.
function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message, { stream: true });
encoded.forEach((chunk) => {
defaultWriter.ready
.then(() => {
defaultWriter.write(chunk);
})
.catch((err) => {
log("Chunk error:", err);
});
});
// Call ready again to ensure that all chunks are written
// before closing the writer.
defaultWriter.ready
.then(() => {
defaultWriter.releaseLock();
writableStream.close();
})
.then(() => {
log("All chunks written / stream closed.");
})
.catch((err) => {
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");
result += decoded;
resolve();
});
},
close() {
const listItem = document.createElement("li");
log(`[MESSAGE RECEIVED] ${result}`);
},
abort(err) {
log("Sink error:", err);
},
},
queuingStrategy,
);
log("Sending 'Hello, world.' message.");
sendMessage("Hello, world.", writableStream);
Спецификации
| Спецификация |
|---|
| Потоки # ref-for-ws-close① |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
close |
81 | 81 | 100 | 68 | 14.1 | 81 | 100 | 58 | 14.5 | 13.0 | 81 |
© 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/WritableStream/close