Spec-Zone.ru › Web APIs

Поток записи: метод 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

Spec-Zone.ru

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