Spec-Zone.ru › Web APIs

WritableStreamDefaultWriter: метод write()

Примечание: Эта функция доступна в Веб-воркерах.

Метод write() интерфейса WritableStreamDefaultWriter записывает переданный фрагмент данных в WritableStream и его подчинённый приемник, затем возвращает Promise, который разрешается, чтобы указать успех или неудачу операции записи.

Обратите внимание, что значение "успеха" зависит от подчинённого приемника; это может означать, что фрагмент был принят, а не обязательно, что он безопасно сохранён в конечном пункте назначения.

Синтаксис

write(chunk)

Параметры

chunk

Блок бинарных данных, передаваемых в WritableStream.

Возвращаемое значение

A Promise, который выполняется с undefined при успешной записи или отклоняется, если запись завершается неудачей или поток становится ошибочным до начала процесса записи.

Исключения

TypeError

Целевой поток не является потоком для записи или у него нет владельца.

Примеры

Следующий пример демонстрирует создание WritableStream с пользовательским приемником и стратегией очереди, предоставляемой API. Затем он вызывает функцию, названную sendMessage(), передавая созданный поток и строку. Внутри этой функции вызывается метод потока getWriter(), возвращающий экземпляр WritableStreamDefaultWriter. Вызов forEach() используется для записи каждого фрагмента строки в поток. Наконец, write() и close() возвращают обещания, которые обрабатываются для решения проблем с успехом или неудачей фрагментов и потоков.

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-write①②

Совместимость с браузерами

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
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/write

Spec-Zone.ru

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