واجهة برمجة تطبيقات تيارات الويب
[السجل]
الإصدار | التغييرات |
---|---|
v21.0.0 | لم يعد تجريبيًا. |
v18.0.0 | لم يعد استخدام واجهة برمجة التطبيقات هذه يصدر تحذيرًا وقت التشغيل. |
v16.5.0 | تمت الإضافة في: v16.5.0 |
تنفيذ لمعيار WHATWG Streams.
نظرة عامة
يُعرّف معيار WHATWG Streams (أو "تيارات الويب") واجهة برمجة تطبيقات لمعالجة البيانات المتدفقة. وهو مشابه لواجهة برمجة تطبيقات Streams في Node.js ولكنه ظهر لاحقًا وأصبح واجهة برمجة التطبيقات "القياسية" للبيانات المتدفقة عبر العديد من بيئات JavaScript.
هناك ثلاثة أنواع رئيسية من الكائنات:
ReadableStream
- يمثل مصدرًا للبيانات المتدفقة.WritableStream
- يمثل وجهة للبيانات المتدفقة.TransformStream
- يمثل خوارزمية لتحويل البيانات المتدفقة.
مثال ReadableStream
يوضح هذا المثال إنشاء ReadableStream
بسيط يدفع طابع زمني performance.now()
الحالي مرة واحدة كل ثانية إلى الأبد. يتم استخدام تكرار غير متزامن لقراءة البيانات من التيار.
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)
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
- النوع: <boolean> تعيين على
true
إذا كان هناك قارئ نشط لهذا <ReadableStream>.
خاصية readableStream.locked
هي false
افتراضيًا، وتتحول إلى true
أثناء وجود قارئ نشط يستهلك بيانات الدفق.
readableStream.cancel([reason])
أضيف في: v16.5.0
reason
<any>- الإرجاع: وعد يتم الوفاء به باستخدام
undefined
بمجرد اكتمال الإلغاء.
readableStream.getReader([options])
أضيف في: v16.5.0
options
<Object>mode
<string>'byob'
أوundefined
الإرجاع: <ReadableStreamDefaultReader> | <ReadableStreamBYOBReader>
import { ReadableStream } from 'node:stream/web'
const stream = new ReadableStream()
const reader = stream.getReader()
console.log(await reader.read())
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
أثناء نشاط عملية الأنابيب.
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
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
هذا إليها. سيتلقى كل منهما نفس البيانات.
يؤدي إلى جعل readableStream.locked
true
.
readableStream.values([options])
مضاف في: v16.5.0
options
<Object>preventCancel
<boolean> عندما تكونtrue
، يمنع إغلاق <ReadableStream> عندما ينتهي مؤشر التكرار غير المتزامن فجأة. الافتراضي:false
.
يُنشئ ويرجع مؤشر تكرار غير متزامن قابل للاستخدام لاستهلاك بيانات ReadableStream
هذا.
يؤدي إلى جعل readableStream.locked
true
أثناء تنفيذ مؤشر التكرار غير المتزامن.
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
.
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>.
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> جديدًا من مُكرر.
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'
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
stream
<ReadableStream>
يُنشئ <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
إلى "أحضر المخزن المؤقت الخاص بك". هذه هي النمط الذي يسمح بقراءة أكثر كفاءة للبيانات المُوجهة للبايت والتي تتجنب النسخ الإضافية.
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
stream
<ReadableStream>
يُنشئ 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 |
view
<عازلة> | <TypedArray> | <DataView>options
<كائن>min
<عدد> عند تعيينه، سيتم الوفاء بالوعد المُرجَع فقط بمجرد توفر عددmin
من العناصر. عندما لا يتم تعيينه، يتم الوفاء بالوعد عندما يتوفر عنصر واحد على الأقل.
القيمة المُرجعة: وعد يتم الوفاء به بكائن:
value
<TypedArray> | <DataView>done
<قيمة منطقية>
يطلب الجزء التالي من البيانات من <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
- النوع: <number>
يُعيد مقدار البيانات المتبقية لملء قائمة انتظار <ReadableStream>.
readableStreamDefaultController.enqueue([chunk])
مضاف في: v16.5.0
chunk
<any>
يضيف جزءًا جديدًا من البيانات إلى قائمة انتظار <ReadableStream>.
readableStreamDefaultController.error([error])
مضاف في: v16.5.0
error
<any>
يُشير إلى خطأ يتسبب في حدوث خطأ في <ReadableStream> وإغلاقه.
الصنف: ReadableByteStreamController
[السجل]
الإصدار | التغييرات |
---|---|
v18.10.0 | دعم معالجة طلب سحب BYOB من قارئ تم إصداره. |
v16.5.0 | مضاف في: v16.5.0 |
كل <ReadableStream> لديه وحدة تحكم مسؤولة عن الحالة الداخلية وإدارة قائمة الانتظار الخاصة بالدفق. ReadableByteStreamController
مخصص لـ ReadableStream
الموجهة للبايت.
readableByteStreamController.byobRequest
تم الإضافة في: v16.5.0
- النوع: <ReadableStreamBYOBRequest>
readableByteStreamController.close()
تم الإضافة في: v16.5.0
يُغلق <ReadableStream> المرتبط بهذا المُتحكم.
readableByteStreamController.desiredSize
تم الإضافة في: v16.5.0
- النوع: <number>
يُعيد مقدار البيانات المتبقية لملء قائمة انتظار <ReadableStream>.
readableByteStreamController.enqueue(chunk)
تم الإضافة في: v16.5.0
chunk
: <Buffer> | <TypedArray> | <DataView>
يُضيف جزءًا جديدًا من البيانات إلى قائمة انتظار <ReadableStream>.
readableByteStreamController.error([error])
تم الإضافة في: v16.5.0
error
<any>
يُشير إلى خطأ يتسبب في حدوث خطأ في <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
<number>
يشير إلى أن عدد بايتات bytesWritten
قد تم كتابتها في readableStreamBYOBRequest.view
.
readableStreamBYOBRequest.respondWithNewView(view)
مضاف في: v16.5.0
view
<Buffer> | <TypedArray> | <DataView>
يشير إلى أن الطلب قد تم الوفاء به مع البايتات المكتوبة في Buffer
أو TypedArray
أو DataView
جديد.
readableStreamBYOBRequest.view
مضاف في: v16.5.0
- النوع: <Buffer> | <TypedArray> | <DataView>
الصف: WritableStream
[السجل]
الإصدار | التغييرات |
---|---|
v18.0.0 | أصبح هذا الصف مكشوفًا على الكائن العام. |
v16.5.0 | مضاف في: v16.5.0 |
WritableStream
هو وجهة يتم إرسال بيانات التدفق إليها.
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
- قيمة الإرجاع: <WritableStreamDefaultWriter>
يُنشئ ويُعيد مثيلًا جديدًا للكاتب والذي يمكن استخدامه لكتابة البيانات في WritableStream
.
writableStream.locked
مضاف في: v16.5.0
- النوع: <منطقية>
تكون خاصية writableStream.locked
false
افتراضيًا، وتتحول إلى true
بينما يوجد كاتب نشط مرتبط بهذا WritableStream
.
النقل باستخدام postMessage()
يمكن نقل مثيل <WritableStream> باستخدام <MessagePort>.
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
stream
<WritableStream>
يُنشئ 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
- النوع: <number>
كمية البيانات المطلوبة لملء قائمة انتظار <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
error
<any>
يتم استدعاء هذه الدالة بواسطة شفرة المستخدم للإشارة إلى حدوث خطأ أثناء معالجة بيانات WritableStream
. عند استدعائها، سيتم إيقاف <WritableStream>، مع إلغاء عمليات الكتابة المعلقة حاليًا.
writableStreamDefaultController.signal
- نوع: <AbortSignal> إشارة
AbortSignal
يمكن استخدامها لإلغاء عمليات الكتابة أو الإغلاق المعلقة عندما يتم إيقاف تشغيل <WritableStream>.
صنف: TransformStream
[السجل]
الإصدار | التغييرات |
---|---|
v18.0.0 | أصبح هذا الصنف مكشوفًا على الكائن العام. |
v16.5.0 | تمت الإضافة في: v16.5.0 |
يتكون TransformStream
من <ReadableStream> و <WritableStream> متصلين بحيث يتم استلام البيانات المكتوبة إلى WritableStream
، وربما يتم تحويلها، قبل دفعها إلى قائمة انتظار ReadableStream
.
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
- النوع: <ReadableStream>
transformStream.writable
مضاف في: v16.5.0
- النوع: <WritableStream>
النقل باستخدام postMessage()
يمكن نقل مثيل <TransformStream> باستخدام <MessagePort>.
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
- النوع: <number>
كمية البيانات المطلوبة لملء قائمة الانتظار في الجانب القابل للقراءة.
transformStreamDefaultController.enqueue([chunk])
مضاف في: v16.5.0
chunk
<any>
يضيف جزءًا من البيانات إلى قائمة انتظار الجانب القابل للقراءة.
transformStreamDefaultController.error([reason])
مضاف في: v16.5.0
reason
<any>
يشير إلى كلا الجانبين، القابل للقراءة والكتابة، إلى حدوث خطأ أثناء معالجة بيانات التحويل، مما يتسبب في إغلاق كلا الجانبين فجأة.
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
- النوع: <number>
byteLengthQueuingStrategy.size
تم الإضافة في: v16.5.0
- النوع: <Function>
Class: CountQueuingStrategy
[السجل]
الإصدار | التغييرات |
---|---|
v18.0.0 | أصبحت هذه الفئة مُعرّفة الآن على الكائن العام. |
v16.5.0 | تم الإضافة في: v16.5.0 |
new CountQueuingStrategy(init)
تم الإضافة في: v16.5.0
countQueuingStrategy.highWaterMark
تم الإضافة في: v16.5.0
- النوع: <number>
countQueuingStrategy.size
تم الإضافة في: v16.5.0
- النوع: <Function>
Class: TextEncoderStream
[السجل]
الإصدار | التغييرات |
---|---|
v18.0.0 | أصبحت هذه الفئة مُعرّفة الآن على الكائن العام. |
v16.6.0 | تم الإضافة في: v16.6.0 |
new TextEncoderStream()
تم الإضافة في: v16.6.0
يُنشئ مثيلًا جديدًا من TextEncoderStream
.
textEncoderStream.encoding
تم الإضافة في: v16.6.0
- النوع: <string>
ترميز مُدعم بواسطة مثيل TextEncoderStream
.
textEncoderStream.readable
تم الإضافة في: v16.6.0
- النوع: <ReadableStream>
textEncoderStream.writable
تم الإضافة في: v16.6.0
- النوع: <WritableStream>
الصف: 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
- النوع: <string>
ترميز مُدعم بواسطة مثيل TextDecoderStream
.
textDecoderStream.fatal
تم الإضافة في: v16.6.0
- النوع: <boolean>
ستكون القيمة true
إذا أدت أخطاء فك التشفير إلى طرح TypeError
.
textDecoderStream.ignoreBOM
تم الإضافة في: v16.6.0
- النوع: <boolean>
ستكون القيمة true
إذا كانت نتيجة فك التشفير ستتضمن علامة ترتيب البايت.
textDecoderStream.readable
تم الإضافة في: v16.6.0
- النوع: <ReadableStream>
textDecoderStream.writable
تم الإضافة في: v16.6.0
- النوع: <WritableStream>
الصنف: 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
- النوع: <ReadableStream>
compressionStream.writable
تم الإضافة في: v17.0.0
- النوع: <WritableStream>
الصنف: 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
- النوع: <ReadableStream>
decompressionStream.writable
تم الإضافة في: v17.0.0
- النوع: <WritableStream>
مُستهلكات المرافق
مُضافة في: v16.7.0
توفر دوال مُستهلك المرافق خيارات شائعة لاستهلاك التدفقات.
يتم الوصول إليها باستخدام:
import { arrayBuffer, blob, buffer, json, text } from 'node:stream/consumers'
const { arrayBuffer, blob, buffer, json, text } = require('node:stream/consumers')
streamConsumers.arrayBuffer(stream)
مُضافة في: v16.7.0
stream
<ReadableStream> | <stream.Readable> | <AsyncIterator>- الإرجاع: <Promise> يُفي بوعد بـ
ArrayBuffer
يحتوي على المحتويات الكاملة للتدفق.
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
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
stream
<ReadableStream> | <stream.Readable> | <AsyncIterator>- الإرجاع: <Promise> يُفي بوعد بـ <Blob> يحتوي على المحتويات الكاملة للتدفق.
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
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
stream
<ReadableStream> | <stream.Readable> | <AsyncIterator>- قيمة الإرجاع: <Promise> يتم الوفاء به باستخدام <Buffer> الذي يحتوي على المحتويات الكاملة للتيار.
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
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
stream
<ReadableStream> | <stream.Readable> | <AsyncIterator>- قيمة الإرجاع: <Promise> يتم الوفاء به بمحتويات التيار التي تم تحليلها كسلسلة مشفرة بتشفير UTF-8، ثم تمريرها عبر
JSON.parse()
.
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
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
stream
<ReadableStream> | <stream.Readable> | <AsyncIterator>- قيمة الإرجاع: <Promise> يُفي بوعد محتوى الدفق الذي تم تحليله كسلسلة مشفرة بترميز UTF-8.
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
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
})