Spec-Zone.ru › Web APIs

WritableStreamDefaultWriter

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

Интерфейс WritableStreamDefaultWriter из API потоков — это объект, возвращаемый WritableStream.getWriter(), и после его создания писатель блокируется на WritableStream, гарантируя, что никакие другие потоки не смогут писать в подлежащий приемник.

Конструктор

WritableStreamDefaultWriter()

Создаёт новый экземпляр объекта WritableStreamDefaultWriter.

Свойства экземпляра

WritableStreamDefaultWriter.closed Только для чтения

Позволяет писать код, реагирующий на завершение процесса потоковой передачи. Возвращает промис, который выполняется, если поток закрыт, или отклоняется, если поток имеет ошибку или блокировка писателя снята.

WritableStreamDefaultWriter.desiredSize Только для чтения

Возвращает необходимый размер для заполнения внутренней очереди потока.

WritableStreamDefaultWriter.ready Только для чтения

Возвращает Promise, который разрешается, когда желаемый размер внутренней очереди потока переходит от неположительного к положительному, сигнализируя о том, что обратная задержка больше не применяется.

Методы экземпляра

WritableStreamDefaultWriter.abort()

Прерывает поток, сигнализируя о том, что производитель больше не может успешно записать в поток, и он должен быть немедленно переведён в состояние ошибки, при этом все записанные в очередь данные будут отброшены.

WritableStreamDefaultWriter.close()

Закрывает связанный поток записи.

WritableStreamDefaultWriter.releaseLock()

Освобождает блокировку писателя для соответствующего потока. После освобождения блокировки писатель больше не активен. Если связанный поток имеет ошибку, когда блокировка освобождается, писатель будет отображаться как имеющий ошибку и далее; в противном случае писатель будет отображаться как закрытый.

WritableStreamDefaultWriter.write()

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

Примеры

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

const list = document.querySelector("ul");

async function sendMessage(message, writableStream) {
  // defaultWriter is of type WritableStreamDefaultWriter
  const defaultWriter = writableStream.getWriter();
  const encoder = new TextEncoder();
  const encoded = encoder.encode(message);

  try {
    for (const chunk of encoded) {
      await defaultWriter.ready;
      await defaultWriter.write(chunk);
      console.log("Chunk written to sink.");
    }
    // Call ready again to ensure that all chunks are written
    // before closing the writer.
    await defaultWriter.ready;
    await defaultWriter.close();
    console.log("All chunks written");
  } catch (err) {
    console.log("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);

Полный код можно найти в нашем примере простого писателя.

Спецификации

Спецификация
Потоки
# default-writer-class

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

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
WritableStreamDefaultWriter 78 79 100 65 14.1 78 100 56 14.5 12.0 78
WritableStreamDefaultWriter 59 16 100 46 14.1 59 100 43 14.5 7.0 59
abort 59 16 100 46 14.1 59 100 43 14.5 7.0 59
close 59 16 100 46 14.1 59 100 43 14.5 7.0 59
closed 59 16 100 46 14.1 59 100 43 14.5 7.0 59
desiredSize 59 16 100 46 14.1 59 100 43 14.5 7.0 59
ready 59 16 100 46 14.1 59 100 43 14.5 7.0 59
releaseLock 59 16 100 46 14.1 59 100 43 14.5 7.0 59
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

Spec-Zone.ru

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