Spec-Zone.ru › Web APIs

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

Spec-Zone.ru

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