Skip to content

واجهة برمجة تطبيقات تيارات الويب

[السجل]

الإصدارالتغييرات
v21.0.0لم يعد تجريبيًا.
v18.0.0لم يعد استخدام واجهة برمجة التطبيقات هذه يصدر تحذيرًا وقت التشغيل.
v16.5.0تمت الإضافة في: v16.5.0

[مستقر: 2 - مستقر]

مستقر: 2 الثبات: 2 - مستقر

تنفيذ لمعيار WHATWG Streams.

نظرة عامة

يُعرّف معيار WHATWG Streams (أو "تيارات الويب") واجهة برمجة تطبيقات لمعالجة البيانات المتدفقة. وهو مشابه لواجهة برمجة تطبيقات Streams في Node.js ولكنه ظهر لاحقًا وأصبح واجهة برمجة التطبيقات "القياسية" للبيانات المتدفقة عبر العديد من بيئات JavaScript.

هناك ثلاثة أنواع رئيسية من الكائنات:

  • ReadableStream - يمثل مصدرًا للبيانات المتدفقة.
  • WritableStream - يمثل وجهة للبيانات المتدفقة.
  • TransformStream - يمثل خوارزمية لتحويل البيانات المتدفقة.

مثال ReadableStream

يوضح هذا المثال إنشاء ReadableStream بسيط يدفع طابع زمني performance.now() الحالي مرة واحدة كل ثانية إلى الأبد. يتم استخدام تكرار غير متزامن لقراءة البيانات من التيار.

js
import { ReadableStream } from 'node:stream/web'

import { setInterval as every } from 'node:timers/promises'

import { performance } from 'node:perf_hooks'

const SECOND = 1000

const stream = new ReadableStream({
  async start(controller) {
    for await (const _ of every(SECOND)) controller.enqueue(performance.now())
  },
})

for await (const value of stream) console.log(value)
js
const { ReadableStream } = require('node:stream/web')

const { setInterval: every } = require('node:timers/promises')

const { performance } = require('node:perf_hooks')

const SECOND = 1000

const stream = new ReadableStream({
  async start(controller) {
    for await (const _ of every(SECOND)) controller.enqueue(performance.now())
  },
})

;(async () => {
  for await (const value of stream) console.log(value)
})()

واجهة برمجة التطبيقات

فئة: ReadableStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبحت هذه الفئة مُعرّفة الآن على الكائن العام.
v16.5.0تمت الإضافة في: v16.5.0

new ReadableStream([underlyingSource [, strategy]])

تمت الإضافة في: v16.5.0

  • underlyingSource <Object>

    • start <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها فورًا عند إنشاء ReadableStream.

    • controller <ReadableStreamDefaultController> | <ReadableByteStreamController>

    • القيمة المُرتجعة: undefined أو وعد يتم تحقيقه مع undefined.

    • pull <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها بشكل متكرر عندما لا تكون قائمة الانتظار الداخلية لـ ReadableStream ممتلئة. قد تكون العملية مُزامنة أو غير مُزامنة. إذا كانت غير مُزامنة، فلن يتم استدعاء الدالة مرة أخرى حتى يتم تحقيق الوعد المُرتجع سابقًا.

    • controller <ReadableStreamDefaultController> | <ReadableByteStreamController>

    • القيمة المُرتجعة: وعد يتم تحقيقه مع undefined.

    • cancel <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها عند إلغاء ReadableStream.

    • reason <any>

    • القيمة المُرتجعة: وعد يتم تحقيقه مع undefined.

    • type <string> يجب أن يكون 'bytes' أو undefined.

    • autoAllocateChunkSize <number> يُستخدم فقط عندما يكون type مساويًا لـ 'bytes'. عندما يتم تعيينه إلى قيمة غير صفرية، يتم تخصيص مُخزن مؤقت للعرض تلقائيًا إلى ReadableByteStreamController.byobRequest. عندما لا يتم تعيينه، يجب على المرء استخدام قوائم الانتظار الداخلية للتيار لنقل البيانات عبر قارئ افتراضي ReadableStreamDefaultReader.

  • strategy <Object>

    • highWaterMark <number> الحد الأقصى لحجم قائمة الانتظار الداخلية قبل تطبيق ضغط الظهر.
    • size <Function> دالة معرفة من قبل المستخدم تُستخدم لتحديد حجم كل جزء من البيانات.
    • chunk <any>
    • القيمة المُرتجعة: <number>

readableStream.locked

أضيف في: v16.5.0

خاصية readableStream.locked هي false افتراضيًا، وتتحول إلى true أثناء وجود قارئ نشط يستهلك بيانات الدفق.

readableStream.cancel([reason])

أضيف في: v16.5.0

  • reason <any>
  • الإرجاع: وعد يتم الوفاء به باستخدام undefined بمجرد اكتمال الإلغاء.

readableStream.getReader([options])

أضيف في: v16.5.0

js
import { ReadableStream } from 'node:stream/web'

const stream = new ReadableStream()

const reader = stream.getReader()

console.log(await reader.read())
js
const { ReadableStream } = require('node:stream/web')

const stream = new ReadableStream()

const reader = stream.getReader()

reader.read().then(console.log)

يسبب أن تكون readableStream.locked true.

readableStream.pipeThrough(transform[, options])

أضيف في: v16.5.0

  • transform <Object>

    • readable <ReadableStream> ReadableStream الذي سيقوم transform.writable بدفع البيانات المعدلة التي يتلقاها من هذا ReadableStream.
    • writable <WritableStream> WritableStream الذي سيتم كتابة بيانات هذا ReadableStream إليه.
  • options <Object>

    • preventAbort <boolean> عندما يكون true، فإن الأخطاء في هذا ReadableStream لن تتسبب في إلغاء transform.writable.
    • preventCancel <boolean> عندما يكون true، فإن الأخطاء في الوجهة transform.writable لا تتسبب في إلغاء هذا ReadableStream.
    • preventClose <boolean> عندما يكون true، فإن إغلاق هذا ReadableStream لا يتسبب في إغلاق transform.writable.
    • signal <AbortSignal> يسمح بإلغاء نقل البيانات باستخدام <AbortController>.
  • الإرجاع: <ReadableStream> من transform.readable.

يربط هذا <ReadableStream> بزوج من <ReadableStream> و <WritableStream> المقدمين في وسيطة transform بحيث يتم كتابة البيانات من هذا <ReadableStream> في transform.writable، ربما يتم تحويلها، ثم يتم دفعها إلى transform.readable. بمجرد تكوين خط الأنابيب، يتم إرجاع transform.readable.

يسبب أن تكون readableStream.locked true أثناء نشاط عملية الأنابيب.

js
import { ReadableStream, TransformStream } from 'node:stream/web'

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue('a')
  },
})

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

const transformedStream = stream.pipeThrough(transform)

for await (const chunk of transformedStream) console.log(chunk)
// يطبع: A
js
const { ReadableStream, TransformStream } = require('node:stream/web')

const stream = new ReadableStream({
  start(controller) {
    controller.enqueue('a')
  },
})

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

const transformedStream = stream.pipeThrough(transform)

;(async () => {
  for await (const chunk of transformedStream) console.log(chunk)
  // يطبع: A
})()

readableStream.pipeTo(destination[, options])

مضاف في: v16.5.0

  • destination <WritableStream> <WritableStream> التي سيتم كتابة بيانات ReadableStream إليها.

  • options <Object>

    • preventAbort <boolean> عندما تكون true، فإن الأخطاء في ReadableStream لن تتسبب في إلغاء destination.
    • preventCancel <boolean> عندما تكون true، فإن الأخطاء في destination لن تتسبب في إلغاء ReadableStream هذا.
    • preventClose <boolean> عندما تكون true، فإن إغلاق ReadableStream هذا لا يتسبب في إغلاق destination.
    • signal <AbortSignal> يسمح بإلغاء نقل البيانات باستخدام <AbortController>.
  • قيمة الإرجاع: وعد يتم الوفاء به مع undefined

يؤدي إلى جعل readableStream.locked true أثناء تنفيذ عملية الأنابيب.

readableStream.tee()

[السجل]

الإصدارالتغييرات
v18.10.0, v16.18.0دعم تقسيم تيار بايت قابل للقراءة.
v16.5.0مضاف في: v16.5.0

يرجع زوجًا من مثيلات <ReadableStream> الجديدة التي سيتم توجيه بيانات ReadableStream هذا إليها. سيتلقى كل منهما نفس البيانات.

يؤدي إلى جعل readableStream.locked true.

readableStream.values([options])

مضاف في: v16.5.0

  • options <Object>
    • preventCancel <boolean> عندما تكون true، يمنع إغلاق <ReadableStream> عندما ينتهي مؤشر التكرار غير المتزامن فجأة. الافتراضي: false.

يُنشئ ويرجع مؤشر تكرار غير متزامن قابل للاستخدام لاستهلاك بيانات ReadableStream هذا.

يؤدي إلى جعل readableStream.locked true أثناء تنفيذ مؤشر التكرار غير المتزامن.

js
import { Buffer } from 'node:buffer'

const stream = new ReadableStream(getSomeSource())

for await (const chunk of stream.values({ preventCancel: true })) console.log(Buffer.from(chunk).toString())

التكرار غير المتزامن

يدعم كائن <ReadableStream> بروتوكول المُكرر غير المتزامن باستخدام بناء جملة for await.

js
import { Buffer } from 'node:buffer'

const stream = new ReadableStream(getSomeSource())

for await (const chunk of stream) console.log(Buffer.from(chunk).toString())

سوف يستهلك المُكرر غير المتزامن <ReadableStream> حتى ينتهي.

بشكل افتراضي، إذا خرج المُكرر غير المتزامن مبكرًا (عبر break أو return أو throw)، فسيتم إغلاق <ReadableStream>. لمنع الإغلاق التلقائي لـ <ReadableStream>، استخدم طريقة readableStream.values() للحصول على المُكرر غير المتزامن واضبط خيار preventCancel على true.

يجب ألا يكون <ReadableStream> مقفلًا (أي أنه يجب ألا يكون لديه قارئ نشط موجود). أثناء التكرار غير المتزامن، سيتم قفل <ReadableStream>.

النقل باستخدام postMessage()

يمكن نقل مثيل <ReadableStream> باستخدام <MessagePort>.

js
const stream = new ReadableStream(getReadableSourceSomehow())

const { port1, port2 } = new MessageChannel()

port1.onmessage = ({ data }) => {
  data
    .getReader()
    .read()
    .then(chunk => {
      console.log(chunk)
    })
}

port2.postMessage(stream, [stream])

ReadableStream.from(iterable)

مضاف في: v20.6.0

  • iterable <Iterable> كائن يُنفذ بروتوكول Symbol.asyncIterator أو Symbol.iterator.

طريقة مساعدة تُنشئ <ReadableStream> جديدًا من مُكرر.

js
import { ReadableStream } from 'node:stream/web'

async function* asyncIterableGenerator() {
  yield 'a'
  yield 'b'
  yield 'c'
}

const stream = ReadableStream.from(asyncIterableGenerator())

for await (const chunk of stream) console.log(chunk) // يُطبع: 'a', 'b', 'c'
js
const { ReadableStream } = require('node:stream/web')

async function* asyncIterableGenerator() {
  yield 'a'
  yield 'b'
  yield 'c'
}

;(async () => {
  const stream = ReadableStream.from(asyncIterableGenerator())

  for await (const chunk of stream) console.log(chunk) // يُطبع: 'a', 'b', 'c'
})()

صنف: ReadableStreamDefaultReader

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف مُعرّفاً على الكائن العام.
v16.5.0تمت الإضافة في: v16.5.0

بشكل افتراضي، فإن استدعاء readableStream.getReader() بدون وسيطات سيُعيد مثيلًا من ReadableStreamDefaultReader. يعامل القارئ الافتراضي أجزاء البيانات المُمرّرة عبر الدفق كقيم مُعتمة، مما يسمح لـ <ReadableStream> بالعمل مع أي قيمة JavaScript بشكل عام.

new ReadableStreamDefaultReader(stream)

تمت الإضافة في: v16.5.0

يُنشئ <ReadableStreamDefaultReader> جديدًا مُقفلًا على <ReadableStream> المُعطى.

readableStreamDefaultReader.cancel([reason])

تمت الإضافة في: v16.5.0

  • reason <أي>
  • القيمة المُرجعّة: وعدٌ مُنجزٌ بقيمة undefined.

يلغي <ReadableStream> ويُعيد وعدًا مُنجزًا عندما يتم إلغاء الدفق الأساسي.

readableStreamDefaultReader.closed

تمت الإضافة في: v16.5.0

  • النوع: <وعد> مُنجزٌ بقيمة undefined عندما يتم إغلاق <ReadableStream> المُرتبط أو مُرفوض إذا حدث خطأ في الدفق أو تم إطلاق قفل القارئ قبل انتهاء إغلاق الدفق.

readableStreamDefaultReader.read()

تمت الإضافة في: v16.5.0

يطلب الجزء التالي من البيانات من <ReadableStream> الأساسي ويُعيد وعدًا مُنجزًا بالبيانات بمجرد توفرها.

readableStreamDefaultReader.releaseLock()

مضاف في: v16.5.0

يُطلق قفل هذا القارئ على <ReadableStream> الأساسي.

الصف: ReadableStreamBYOBReader

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصف مُعرّفًا على الكائن العام.
v16.5.0مُضاف في: v16.5.0

يُعدّ ReadableStreamBYOBReader مُستهلكًا بديلًا لتيارات <ReadableStream> المُوجهة للبايت (التي تم إنشاؤها باستخدام underlyingSource.type المُعيّن على 'bytes' عند إنشاء ReadableStream).

يُختصر BYOB إلى "أحضر المخزن المؤقت الخاص بك". هذه هي النمط الذي يسمح بقراءة أكثر كفاءة للبيانات المُوجهة للبايت والتي تتجنب النسخ الإضافية.

js
import { open } from 'node:fs/promises'

import { ReadableStream } from 'node:stream/web'

import { Buffer } from 'node:buffer'

class Source {
  type = 'bytes'
  autoAllocateChunkSize = 1024

  async start(controller) {
    this.file = await open(new URL(import.meta.url))
    this.controller = controller
  }

  async pull(controller) {
    const view = controller.byobRequest?.view
    const { bytesRead } = await this.file.read({
      buffer: view,
      offset: view.byteOffset,
      length: view.byteLength,
    })

    if (bytesRead === 0) {
      await this.file.close()
      this.controller.close()
    }
    controller.byobRequest.respond(bytesRead)
  }
}

const stream = new ReadableStream(new Source())

async function read(stream) {
  const reader = stream.getReader({ mode: 'byob' })

  const chunks = []
  let result
  do {
    result = await reader.read(Buffer.alloc(100))
    if (result.value !== undefined) chunks.push(Buffer.from(result.value))
  } while (!result.done)

  return Buffer.concat(chunks)
}

const data = await read(stream)
console.log(Buffer.from(data).toString())

new ReadableStreamBYOBReader(stream)

مضاف في: v16.5.0

يُنشئ ReadableStreamBYOBReader جديدًا مُقفلًا على <ReadableStream> المُعطى.

readableStreamBYOBReader.cancel([reason])

تم الإضافة في: v16.5.0

  • reason <أي>
  • القيمة المُرجعة: وعد يتم الوفاء به مع undefined.

يلغي <ReadableStream> ويعيد وعدًا يتم الوفاء به عندما يتم إلغاء التدفق الأساسي.

readableStreamBYOBReader.closed

تم الإضافة في: v16.5.0

  • النوع: <وعد> يتم الوفاء به مع undefined عندما يتم إغلاق <ReadableStream> المرتبط أو يتم رفضه إذا حدث خطأ في التدفق أو تم إصدار قفل القارئ قبل انتهاء إغلاق التدفق.

readableStreamBYOBReader.read(view[, options])

[السجل]

الإصدارالتغييرات
v21.7.0, v20.17.0تم إضافة خيار min.
v16.5.0تم الإضافة في: v16.5.0

يطلب الجزء التالي من البيانات من <ReadableStream> الأساسي ويعيد وعدًا يتم الوفاء به بالبيانات بمجرد توفرها.

لا تمرر مثيل كائن <عازلة> مجمعة في هذه الطريقة. يتم إنشاء كائنات Buffer المجمعة باستخدام Buffer.allocUnsafe()، أو Buffer.from()، أو غالبًا ما يتم إرجاعها بواسطة العديد من استدعاءات الوظائف المعيارية node:fs. تستخدم هذه الأنواع من Buffer كائن <ArrayBuffer> أساسيًا مُشاركًا يحتوي على جميع البيانات من جميع أمثلة Buffer المجمعة. عندما يتم تمرير Buffer، <TypedArray>، أو <DataView> إلى readableStreamBYOBReader.read()، يتم فصل ArrayBuffer الأساسي للعرض، مما يبطل جميع العروض الموجودة التي قد توجد على هذا ArrayBuffer. قد يكون لهذا عواقب وخيمة على تطبيقك.

readableStreamBYOBReader.releaseLock()

مضاف في: v16.5.0

يُطلق قفل هذا القارئ على <ReadableStream> الأساسي.

الصنف: ReadableStreamDefaultController

مضاف في: v16.5.0

كل <ReadableStream> لديه وحدة تحكم مسؤولة عن الحالة الداخلية وإدارة قائمة الانتظار الخاصة بالدفق. ReadableStreamDefaultController هو تنفيذ وحدة التحكم الافتراضي لـ ReadableStream التي ليست موجهة للبايت.

readableStreamDefaultController.close()

مضاف في: v16.5.0

يُغلق <ReadableStream> المرتبط بهذه وحدة التحكم.

readableStreamDefaultController.desiredSize

مضاف في: v16.5.0

يُعيد مقدار البيانات المتبقية لملء قائمة انتظار <ReadableStream>.

readableStreamDefaultController.enqueue([chunk])

مضاف في: v16.5.0

يضيف جزءًا جديدًا من البيانات إلى قائمة انتظار <ReadableStream>.

readableStreamDefaultController.error([error])

مضاف في: v16.5.0

يُشير إلى خطأ يتسبب في حدوث خطأ في <ReadableStream> وإغلاقه.

الصنف: ReadableByteStreamController

[السجل]

الإصدارالتغييرات
v18.10.0دعم معالجة طلب سحب BYOB من قارئ تم إصداره.
v16.5.0مضاف في: v16.5.0

كل <ReadableStream> لديه وحدة تحكم مسؤولة عن الحالة الداخلية وإدارة قائمة الانتظار الخاصة بالدفق. ReadableByteStreamController مخصص لـ ReadableStream الموجهة للبايت.

readableByteStreamController.byobRequest

تم الإضافة في: v16.5.0

readableByteStreamController.close()

تم الإضافة في: v16.5.0

يُغلق <ReadableStream> المرتبط بهذا المُتحكم.

readableByteStreamController.desiredSize

تم الإضافة في: v16.5.0

يُعيد مقدار البيانات المتبقية لملء قائمة انتظار <ReadableStream>.

readableByteStreamController.enqueue(chunk)

تم الإضافة في: v16.5.0

يُضيف جزءًا جديدًا من البيانات إلى قائمة انتظار <ReadableStream>.

readableByteStreamController.error([error])

تم الإضافة في: v16.5.0

يُشير إلى خطأ يتسبب في حدوث خطأ في <ReadableStream> وإغلاقه.

الصف: ReadableStreamBYOBRequest

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصف مُعرّفًا الآن على الكائن العام.
v16.5.0تم الإضافة في: v16.5.0

عند استخدام ReadableByteStreamController في التدفقات الموجهة بالبايت، وعند استخدام ReadableStreamBYOBReader، توفر خاصية readableByteStreamController.byobRequest الوصول إلى مثيل ReadableStreamBYOBRequest الذي يمثل طلب القراءة الحالي. ويُستخدم الكائن للحصول على الوصول إلى ArrayBuffer/TypedArray الذي تم توفيره لطلب القراءة لملئه، ويوفر طرقًا للإشارة إلى أن البيانات قد تم توفيرها.

readableStreamBYOBRequest.respond(bytesWritten)

مضاف في: v16.5.0

يشير إلى أن عدد بايتات bytesWritten قد تم كتابتها في readableStreamBYOBRequest.view.

readableStreamBYOBRequest.respondWithNewView(view)

مضاف في: v16.5.0

يشير إلى أن الطلب قد تم الوفاء به مع البايتات المكتوبة في Buffer أو TypedArray أو DataView جديد.

readableStreamBYOBRequest.view

مضاف في: v16.5.0

الصف: WritableStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصف مكشوفًا على الكائن العام.
v16.5.0مضاف في: v16.5.0

WritableStream هو وجهة يتم إرسال بيانات التدفق إليها.

js
import { WritableStream } from 'node:stream/web'

const stream = new WritableStream({
  write(chunk) {
    console.log(chunk)
  },
})

await stream.getWriter().write('Hello World')

new WritableStream([underlyingSink[, strategy]])

مضاف في: v16.5.0

  • underlyingSink <Object>

    • start <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها فورًا عند إنشاء WritableStream.

    • controller <WritableStreamDefaultController>

    • القيمة المُرجعة: undefined أو وعد مُحقق بـ undefined.

    • write <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها عند كتابة جزء من البيانات إلى WritableStream.

    • chunk <any>

    • controller <WritableStreamDefaultController>

    • القيمة المُرجعة: وعد مُحقق بـ undefined.

    • close <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها عند إغلاق WritableStream.

    • القيمة المُرجعة: وعد مُحقق بـ undefined.

    • abort <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها لإغلاق WritableStream فجأة.

    • reason <any>

    • القيمة المُرجعة: وعد مُحقق بـ undefined.

    • type <any> خيار type مُحجوز للاستخدام في المستقبل ويجب أن يكون undefined.

  • strategy <Object>

    • highWaterMark <number> الحد الأقصى لحجم قائمة الانتظار الداخلية قبل تطبيق ضغط البيانات العكسي.
    • size <Function> دالة معرفة من قبل المستخدم تُستخدم لتحديد حجم كل جزء من البيانات.
    • chunk <any>
    • القيمة المُرجعة: <number>

writableStream.abort([reason])

مضاف في: v16.5.0

  • reason <أي>
  • قيمة الإرجاع: وعد ينجز بقيمة undefined.

يُنهي WritableStream بشكل مفاجئ. سيتم إلغاء جميع عمليات الكتابة المُضافة في قائمة الانتظار مع رفض وعودها المرتبطة.

writableStream.close()

مضاف في: v16.5.0

  • قيمة الإرجاع: وعد ينجز بقيمة undefined.

يُغلق WritableStream عندما لا يُتوقع المزيد من عمليات الكتابة.

writableStream.getWriter()

مضاف في: v16.5.0

يُنشئ ويُعيد مثيلًا جديدًا للكاتب والذي يمكن استخدامه لكتابة البيانات في WritableStream.

writableStream.locked

مضاف في: v16.5.0

تكون خاصية writableStream.locked false افتراضيًا، وتتحول إلى true بينما يوجد كاتب نشط مرتبط بهذا WritableStream.

النقل باستخدام postMessage()

يمكن نقل مثيل <WritableStream> باستخدام <MessagePort>.

js
const stream = new WritableStream(getWritableSinkSomehow())

const { port1, port2 } = new MessageChannel()

port1.onmessage = ({ data }) => {
  data.getWriter().write('hello')
}

port2.postMessage(stream, [stream])

الصف: WritableStreamDefaultWriter

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف مُعرّفًا الآن على الكائن العام.
v16.5.0مضاف في: v16.5.0

new WritableStreamDefaultWriter(stream)

مضاف في: v16.5.0

يُنشئ WritableStreamDefaultWriter جديدًا مُقفلًا على WritableStream المُعطى.

writableStreamDefaultWriter.abort([reason])

مضاف في: v16.5.0

  • reason <أي>
  • قيمة الإرجاع: وعد ينجز بقيمة undefined.

يُنهي WritableStream بشكل مفاجئ. سيتم إلغاء جميع عمليات الكتابة المُضافة في قائمة الانتظار مع رفض وعودها المرتبطة.

writableStreamDefaultWriter.close()

مضاف في: v16.5.0

  • القيمة المُرجعة: وعدٌ مُنجز بقيمة undefined.

يقوم بإغلاق WritableStream عندما لا يُتوقع المزيد من عمليات الكتابة.

writableStreamDefaultWriter.closed

مضاف في: v16.5.0

  • النوع: <Promise> مُنجز بقيمة undefined عندما يتم إغلاق <WritableStream> المُرتبط، أو مُرفوض إذا حدث خطأ في التيار أو تم تحرير قفل الكاتب قبل انتهاء إغلاق التيار.

writableStreamDefaultWriter.desiredSize

مضاف في: v16.5.0

كمية البيانات المطلوبة لملء قائمة انتظار <WritableStream>.

writableStreamDefaultWriter.ready

مضاف في: v16.5.0

  • النوع: <Promise> مُنجز بقيمة undefined عندما يكون الكاتب جاهزًا للاستخدام.

writableStreamDefaultWriter.releaseLock()

مضاف في: v16.5.0

يُحرر قفل هذا الكاتب على <ReadableStream> الأساسي.

writableStreamDefaultWriter.write([chunk])

مضاف في: v16.5.0

  • chunk: <any>
  • القيمة المُرجعة: وعدٌ مُنجز بقيمة undefined.

يضيف جزءًا جديدًا من البيانات إلى قائمة انتظار <WritableStream>.

Class: WritableStreamDefaultController

[السجل]

الإصدارالتغييرات
v18.0.0أصبحت هذه الفئة مُعرضة الآن على الكائن العام.
v16.5.0مضاف في: v16.5.0

يقوم WritableStreamDefaultController بإدارة الحالة الداخلية لـ <WritableStream>.

writableStreamDefaultController.error([error])

مضاف في: v16.5.0

يتم استدعاء هذه الدالة بواسطة شفرة المستخدم للإشارة إلى حدوث خطأ أثناء معالجة بيانات WritableStream. عند استدعائها، سيتم إيقاف <WritableStream>، مع إلغاء عمليات الكتابة المعلقة حاليًا.

writableStreamDefaultController.signal

  • نوع: <AbortSignal> إشارة AbortSignal يمكن استخدامها لإلغاء عمليات الكتابة أو الإغلاق المعلقة عندما يتم إيقاف تشغيل <WritableStream>.

صنف: TransformStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف مكشوفًا على الكائن العام.
v16.5.0تمت الإضافة في: v16.5.0

يتكون TransformStream من <ReadableStream> و <WritableStream> متصلين بحيث يتم استلام البيانات المكتوبة إلى WritableStream، وربما يتم تحويلها، قبل دفعها إلى قائمة انتظار ReadableStream.

js
import { TransformStream } from 'node:stream/web'

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

await Promise.all([transform.writable.getWriter().write('A'), transform.readable.getReader().read()])

new TransformStream([transformer[, writableStrategy[, readableStrategy]]])

تمت الإضافة في: v16.5.0

  • transformer <Object>

    • start <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها فورًا عند إنشاء TransformStream.

    • controller <TransformStreamDefaultController>

    • قيمة الإرجاع: undefined أو وعد يتم الوفاء به مع undefined

    • transform <Function> دالة معرفة من قبل المستخدم تستقبل، وربما تعدل، جزءًا من البيانات المكتوبة إلى transformStream.writable، قبل توجيهها إلى transformStream.readable.

    • chunk <any>

    • controller <TransformStreamDefaultController>

    • قيمة الإرجاع: وعد يتم الوفاء به مع undefined.

    • flush <Function> دالة معرفة من قبل المستخدم يتم استدعاؤها مباشرة قبل إغلاق الجانب القابل للكتابة من TransformStream، مما يشير إلى نهاية عملية التحويل.

    • controller <TransformStreamDefaultController>

    • قيمة الإرجاع: وعد يتم الوفاء به مع undefined.

    • readableType <any> خيار readableType محجوز للاستخدام في المستقبل ويجب أن يكون undefined.

    • writableType <any> خيار writableType محجوز للاستخدام في المستقبل ويجب أن يكون undefined.

  • writableStrategy <Object>

    • highWaterMark <number> الحد الأقصى لحجم قائمة الانتظار الداخلية قبل تطبيق ضغط الظهر.
    • size <Function> دالة معرفة من قبل المستخدم تُستخدم لتحديد حجم كل جزء من البيانات.
    • chunk <any>
    • قيمة الإرجاع: <number>
  • readableStrategy <Object>

    • highWaterMark <number> الحد الأقصى لحجم قائمة الانتظار الداخلية قبل تطبيق ضغط الظهر.
    • size <Function> دالة معرفة من قبل المستخدم تُستخدم لتحديد حجم كل جزء من البيانات.
    • chunk <any>
    • قيمة الإرجاع: <number>

transformStream.readable

مضاف في: v16.5.0

transformStream.writable

مضاف في: v16.5.0

النقل باستخدام postMessage()

يمكن نقل مثيل <TransformStream> باستخدام <MessagePort>.

js
const stream = new TransformStream()

const { port1, port2 } = new MessageChannel()

port1.onmessage = ({ data }) => {
  const { writable, readable } = data
  // ...
}

port2.postMessage(stream, [stream])

الصنف: TransformStreamDefaultController

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف معروضًا الآن على الكائن العام.
v16.5.0مضاف في: v16.5.0

يدير TransformStreamDefaultController الحالة الداخلية لـ TransformStream.

transformStreamDefaultController.desiredSize

مضاف في: v16.5.0

كمية البيانات المطلوبة لملء قائمة الانتظار في الجانب القابل للقراءة.

transformStreamDefaultController.enqueue([chunk])

مضاف في: v16.5.0

يضيف جزءًا من البيانات إلى قائمة انتظار الجانب القابل للقراءة.

transformStreamDefaultController.error([reason])

مضاف في: v16.5.0

يشير إلى كلا الجانبين، القابل للقراءة والكتابة، إلى حدوث خطأ أثناء معالجة بيانات التحويل، مما يتسبب في إغلاق كلا الجانبين فجأة.

transformStreamDefaultController.terminate()

مضاف في: v16.5.0

يغلق الجانب القابل للقراءة للنقل ويتسبب في إغلاق الجانب القابل للكتابة فجأة بخطأ.

الصنف: ByteLengthQueuingStrategy

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف معروضًا الآن على الكائن العام.
v16.5.0مضاف في: v16.5.0

new ByteLengthQueuingStrategy(init)

تم الإضافة في: v16.5.0

byteLengthQueuingStrategy.highWaterMark

تم الإضافة في: v16.5.0

byteLengthQueuingStrategy.size

تم الإضافة في: v16.5.0

Class: CountQueuingStrategy

[السجل]

الإصدارالتغييرات
v18.0.0أصبحت هذه الفئة مُعرّفة الآن على الكائن العام.
v16.5.0تم الإضافة في: v16.5.0

new CountQueuingStrategy(init)

تم الإضافة في: v16.5.0

countQueuingStrategy.highWaterMark

تم الإضافة في: v16.5.0

countQueuingStrategy.size

تم الإضافة في: v16.5.0

Class: TextEncoderStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبحت هذه الفئة مُعرّفة الآن على الكائن العام.
v16.6.0تم الإضافة في: v16.6.0

new TextEncoderStream()

تم الإضافة في: v16.6.0

يُنشئ مثيلًا جديدًا من TextEncoderStream.

textEncoderStream.encoding

تم الإضافة في: v16.6.0

ترميز مُدعم بواسطة مثيل TextEncoderStream.

textEncoderStream.readable

تم الإضافة في: v16.6.0

textEncoderStream.writable

تم الإضافة في: v16.6.0

الصف: TextDecoderStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف مُعرّفًا على الكائن العام.
v16.6.0تم الإضافة في: v16.6.0

new TextDecoderStream([encoding[, options]])

تم الإضافة في: v16.6.0

  • encoding <string> يُحدد ترميز encoding الذي يدعمه هذا المثيل من TextDecoder. افتراضيًا: 'utf-8'.
  • options <Object>
    • fatal <boolean> true إذا كانت أخطاء فك التشفير قاتلة.
    • ignoreBOM <boolean> عندما تكون true، سيُدرج TextDecoderStream علامة ترتيب البايت في النتيجة المُفككة. عندما تكون false، سيتم إزالة علامة ترتيب البايت من المخرجات. يُستخدم هذا الخيار فقط عندما يكون encoding هو 'utf-8', 'utf-16be', أو 'utf-16le'. افتراضيًا: false.

يُنشئ مثيلًا جديدًا من TextDecoderStream.

textDecoderStream.encoding

تم الإضافة في: v16.6.0

ترميز مُدعم بواسطة مثيل TextDecoderStream.

textDecoderStream.fatal

تم الإضافة في: v16.6.0

ستكون القيمة true إذا أدت أخطاء فك التشفير إلى طرح TypeError.

textDecoderStream.ignoreBOM

تم الإضافة في: v16.6.0

ستكون القيمة true إذا كانت نتيجة فك التشفير ستتضمن علامة ترتيب البايت.

textDecoderStream.readable

تم الإضافة في: v16.6.0

textDecoderStream.writable

تم الإضافة في: v16.6.0

الصنف: CompressionStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف الآن معروضًا على الكائن العام.
v17.0.0تم الإضافة في: v17.0.0

new CompressionStream(format)

[السجل]

الإصدارالتغييرات
v21.2.0, v20.12.0الآن، تقبل format قيمة deflate-raw.
v17.0.0تم الإضافة في: v17.0.0
  • format <string> أحد 'deflate', 'deflate-raw', أو 'gzip'.

compressionStream.readable

تم الإضافة في: v17.0.0

compressionStream.writable

تم الإضافة في: v17.0.0

الصنف: DecompressionStream

[السجل]

الإصدارالتغييرات
v18.0.0أصبح هذا الصنف الآن معروضًا على الكائن العام.
v17.0.0تم الإضافة في: v17.0.0

new DecompressionStream(format)

[السجل]

الإصدارالتغييرات
v21.2.0, v20.12.0الآن، تقبل format قيمة deflate-raw.
v17.0.0تم الإضافة في: v17.0.0
  • format <string> أحد 'deflate', 'deflate-raw', أو 'gzip'.

decompressionStream.readable

تم الإضافة في: v17.0.0

decompressionStream.writable

تم الإضافة في: v17.0.0

مُستهلكات المرافق

مُضافة في: v16.7.0

توفر دوال مُستهلك المرافق خيارات شائعة لاستهلاك التدفقات.

يتم الوصول إليها باستخدام:

js
import { arrayBuffer, blob, buffer, json, text } from 'node:stream/consumers'
js
const { arrayBuffer, blob, buffer, json, text } = require('node:stream/consumers')

streamConsumers.arrayBuffer(stream)

مُضافة في: v16.7.0

js
import { arrayBuffer } from 'node:stream/consumers'
import { Readable } from 'node:stream'
import { TextEncoder } from 'node:util'

const encoder = new TextEncoder()
const dataArray = encoder.encode('hello world from consumers!')

const readable = Readable.from(dataArray)
const data = await arrayBuffer(readable)
console.log(`from readable: ${data.byteLength}`)
// Prints: from readable: 76
js
const { arrayBuffer } = require('node:stream/consumers')
const { Readable } = require('node:stream')
const { TextEncoder } = require('node:util')

const encoder = new TextEncoder()
const dataArray = encoder.encode('hello world from consumers!')
const readable = Readable.from(dataArray)
arrayBuffer(readable).then(data => {
  console.log(`from readable: ${data.byteLength}`)
  // Prints: from readable: 76
})

streamConsumers.blob(stream)

مُضافة في: v16.7.0

js
import { blob } from 'node:stream/consumers'

const dataBlob = new Blob(['hello world from consumers!'])

const readable = dataBlob.stream()
const data = await blob(readable)
console.log(`from readable: ${data.size}`)
// Prints: from readable: 27
js
const { blob } = require('node:stream/consumers')

const dataBlob = new Blob(['hello world from consumers!'])

const readable = dataBlob.stream()
blob(readable).then(data => {
  console.log(`from readable: ${data.size}`)
  // Prints: from readable: 27
})

streamConsumers.buffer(stream)

مضاف في: v16.7.0

js
import { buffer } from 'node:stream/consumers'
import { Readable } from 'node:stream'
import { Buffer } from 'node:buffer'

const dataBuffer = Buffer.from('hello world from consumers!')

const readable = Readable.from(dataBuffer)
const data = await buffer(readable)
console.log(`from readable: ${data.length}`)
// يطبع: from readable: 27
js
const { buffer } = require('node:stream/consumers')
const { Readable } = require('node:stream')
const { Buffer } = require('node:buffer')

const dataBuffer = Buffer.from('hello world from consumers!')

const readable = Readable.from(dataBuffer)
buffer(readable).then(data => {
  console.log(`from readable: ${data.length}`)
  // يطبع: from readable: 27
})

streamConsumers.json(stream)

مضاف في: v16.7.0

js
import { json } from 'node:stream/consumers'
import { Readable } from 'node:stream'

const items = Array.from(
  {
    length: 100,
  },
  () => ({
    message: 'hello world from consumers!',
  })
)

const readable = Readable.from(JSON.stringify(items))
const data = await json(readable)
console.log(`from readable: ${data.length}`)
// يطبع: from readable: 100
js
const { json } = require('node:stream/consumers')
const { Readable } = require('node:stream')

const items = Array.from(
  {
    length: 100,
  },
  () => ({
    message: 'hello world from consumers!',
  })
)

const readable = Readable.from(JSON.stringify(items))
json(readable).then(data => {
  console.log(`from readable: ${data.length}`)
  // يطبع: from readable: 100
})

streamConsumers.text(stream)

مضاف في: v16.7.0

js
import { text } from 'node:stream/consumers'
import { Readable } from 'node:stream'

const readable = Readable.from('Hello world from consumers!')
const data = await text(readable)
console.log(`from readable: ${data.length}`)
// يطبع: from readable: 27
js
const { text } = require('node:stream/consumers')
const { Readable } = require('node:stream')

const readable = Readable.from('Hello world from consumers!')
text(readable).then(data => {
  console.log(`from readable: ${data.length}`)
  // يطبع: from readable: 27
})