انتقل إلى المحتوى

تدفقات ⁦WHATWG⁩

التدفقات القابلة للقراءة والكتابة والتحويل وتدفقات البايتات و⁦BYOB⁩.

في هذه الصفحة

يكشف ⁦Elide⁩ التدفقات القابلة للقراءة والكتابة والتحويل مع القرّاء والكتّاب والمتحكمات واستراتيجيات الطوابير والتوصيل والتفريع والتكرار غير المتزامن.

ReadableStream

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue("hello");
    controller.enqueue("world");
    controller.close();
  },
});

const reader = stream.getReader();
(await reader.read()).value; // "hello"
(await reader.read()).value; // "world"
(await reader.read()).done;  // true

توفر التدفقات القابلة للقراءة ⁦cancel()⁩ و⁦getReader()⁩ و⁦pipeThrough()⁩ و⁦pipeTo()⁩ و⁦tee()⁩ والتكرار غير المتزامن و⁦values()⁩ و ⁦ReadableStream.from()⁩.

⁦WritableStream⁩ و⁦TransformStream⁩

توفر التدفقات القابلة للكتابة ⁦abort()⁩ و⁦close()⁩ و⁦getWriter()⁩. وتقرن تدفقات التحويل مدخلًا قابلًا للكتابة بمخرج قابل للقراءة.

const upper = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  },
});

const source = ReadableStream.from(["hello"]);
const destination = new WritableStream({
  write(chunk) {
    console.log(chunk); // HELLO
  },
});

await source.pipeThrough(upper).pipeTo(destination);

يستخدم الضغط العكسي ⁦highWaterMark⁩ وخوارزمية ⁦size⁩ المضبوطين. و⁦CountQueuingStrategy⁩ و⁦ByteLengthQueuingStrategy⁩ كائنان عامان.

تدفقات البايتات و⁦BYOB⁩

const bytes = new ReadableStream({
  type: "bytes",
  start(controller) {
    controller.enqueue(new Uint8Array([1, 2, 3]));
    controller.close();
  },
});

const reader = bytes.getReader({ mode: "byob" });
const target = new Uint8Array(8);
const pending = reader.read(target);
target.buffer.byteLength; // 0: transferred immediately

const { value } = await pending;
Array.from(value); // [1, 2, 3]

تنقل عمليات ⁦BYOB⁩ المخزن المؤقت المقدَّم وتفصله. وإعادة استخدام العرض الأصلي ترمي خطأً. والتدفقات القابلة للنقل مدعومة ضمن النطاق نفسه؛ أما النقل بين العمال فيبقى محدودًا.

راجع تدفقات الضغط لتحويلات البايتات.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
ReadableStreamclassFulllocked, cancel(), getReader(), pipeThrough(), pipeTo(), tee()
ReadableStreamDefaultReaderclassFullclosed, read(), releaseLock(), cancel()
ReadableStreamDefaultControllerclassFulldesiredSize, close(), enqueue(), error()
ReadableStreamBYOBReaderclassFullclosed, read(), releaseLock(), cancel()
ReadableByteStreamControllerclassFullbyobRequest, desiredSize, close(), enqueue(), error()
ReadableStreamBYOBRequestclassFullview, respond(), respondWithNewView()
WritableStreamclassFulllocked, abort(), close(), getWriter()
WritableStreamDefaultWriterclassFullclosed, desiredSize, ready, abort(), close(), releaseLock(), write()
WritableStreamDefaultControllerclassFullsignal, error()
TransformStreamclassFullreadable, writable
TransformStreamDefaultControllerclassFulldesiredSize, enqueue(), error(), terminate()
CountQueuingStrategyclassFullhighWaterMark, size
ByteLengthQueuingStrategyclassFullhighWaterMark, size

هل كانت هذه الصفحة مفيدة؟