Readable class

يمتد

Stream

الخصائص

closed

لقد تم إصدار الخبر true بعد 'close' ذلك.

destroyed

تم استدعاء بعد truereadable.destroy() ذلك.

errored

يرجع خطأ إذا تم تدمير التدفق مع وجود خطأ.

readable

هل true من الآمن استدعاء القراءة'error' الصحيحة، مما يعني أن التدفق لم يتم تدميره أو انبعاث أو 'end'.

readableAborted

يرجع ما إذا كان التدفق قد تم تدميره أو تم تعرضه للخطأ قبل إصدار 'end'.

readableDidRead

يعود ما إذا 'data' كان قد تم إصداره.

readableEncoding

الحصول على خاصية encoding تيار معين Readable . يمكن تعيين الخاصية encoding باستخدام طريقة setEncoding (الترميز ).

readableEnded

يصبح true عندما 'end' يصدر الحدث.

readableFlowing

تعكس هذه الخاصية الحالة الحالية للجدول Readable كما هو موضح في قسم الحالات الثلاث .

readableHighWaterMark

يعيد قيمة تم تمريرها highWaterMark عند إنشاء هذا Readable.

readableLength

تحتوي هذه الخاصية على عدد البايتات (أو الكائنات) في قائمة الانتظار الجاهزة للقراءة. توفر القيمة بيانات استبطانية حول حالة highWaterMark.

readableObjectMode

الحصول على خاصية objectMode تيار معين Readable .

الأساليب

addListener(string | symbol, (args: any[]) => void)
addListener<E>(E, (args: ReadableEventMap[E]) => void)
compose(WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, Abortable)
import { Readable } from 'node:stream';

async function* splitToWords(source) {
  for await (const chunk of source) {
    const words = String(chunk).split(' ');

    for (const word of words) {
      yield word;
    }
  }
}

const wordsStream = Readable.from(['text passed through', 'composed stream']).compose(splitToWords);
const words = await wordsStream.toArray();

console.log(words); // prints ['text', 'passed', 'through', 'composed', 'stream']

readable.compose(s) يُعادل stream.compose(readable, s).

تسمح هذه الطريقة أيضا بتوفير ال () AbortSignal الذي سيدمر التدفق المركب عند الإجهاض.

راجع stream.compose(...streams) لمزيد من المعلومات.

destroy(Error)

تدمير الدفق. اختياريا، تصدر 'error' حدثا، وتقوم 'close' بإصدار حدث (إلا إذا emitClose تم ضبطه على false). بعد هذه المكالمة، سيطلق التدفق القابل للقراءة أي موارد داخلية وسيتم تجاهل المكالمات اللاحقة إليها push() .

بمجرد destroy() استدعاء أي استدعاءات أخرى ستكون no-op ولا يمكن إصدار أخطاء أخرى باستثناء من _destroy() ك 'error'.

يجب ألا يتجاوز المنفذون هذه الطريقة، بل ينفذون readable._destroy().

drop(number, Abortable)

تعيد هذه الطريقة تدفقا جديدا مع أول قطع حد تم حذفها من البداية.

emit(string | symbol, any[])
emit<E>(E, ReadableEventMap[E])
every((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.every و تستدعي fn على كل جزء في التدفق للتحقق مما إذا كانت جميع قيم الإرجاع المنتظرة هي قيمة حقيقية ل fn. بمجرد أن يكون استدعاء fn على قيمة إرجاع جزء awaitومستوى خاطئ، يتم تدمير التدفق ويتحقق الوعد ب false. إذا أعادت جميع استدعاءات fn على الأجزاء قيمة حقيقية، يتم تحقيق الوعد ب true.

filter((data: any, options?: Abortable) => boolean | Promise<boolean>, ReadableOperatorOptions)

تسمح هذه الطريقة بتصفية التدفق. لكل جزء في التدفق سيتم استدعاء دالة fn وإذا أعادت قيمة تروثي، سيتم تمرير القطعة إلى تدفق النتيجة. إذا أعادت دالة fn وعدا - فسيكون awaitذلك الوعد ed.

find((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
find<T>((data: any, options?: Abortable) => data, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.find وتستدعي fn على كل جزء في التدفق لإيجاد قطعة ذات قيمة حقيقية ل fn. بمجرد أن تصبح قيمة العودة المنتظرة لنداء fn هي Truthy، يتم تدمير البث ويتحقق الوعد بقيمة أعاد fn قيمة truthy. إذا أعادت جميع استدعاءات fn على الأجزاء قيمة زائفة، يتم الوفاء بالوعد ب undefined.

flatMap((data: any, options?: Abortable) => any, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

تعيد هذه الطريقة تدفقا جديدا عن طريق تطبيق الاستدعاء المعطى على كل جزء من التدفق ثم تسطيح النتيجة.

من الممكن إرجاع تدفق أو تكرار متكرر أو غير متزامن من fn وسيتم دمج (تسطيح) التدفقات الناتجة في التدفق المعاد الآن.

forEach((data: any, options?: Abortable) => void | Promise<void>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

تسمح هذه الطريقة بتكرار التدفق. لكل جزء في التدفق سيتم استدعاء دالة fn . إذا أعادت دالة fn وعدا - فسيكون awaitذلك الوعد ed.

تختلف هذه الطريقة عن for await...of الحلقات في أنها يمكنها معالجة الأجزاء بشكل اختياري في نفس الوقت. بالإضافة إلى ذلك، لا يمكن إيقاف التكرار forEach إلا بعد اجتياز خيار وإلغاء signal AbortController المرتبط بينما for await...of يمكن إيقافه باستخدام break أو return. في كلتا الحالتين سيتم تدمير التيار.

تختلف هذه الطريقة عن الاستماع إلى الحدث 'data' لأنها تستخدم الحدث readable في الآلية الأساسية ويمكنها تحديد عدد مكالمات fn المتزامنة.

from(Iterable<any> | AsyncIterable<any>, ReadableOptions<Readable>)

طريقة مساعدة لإنشاء تدفقات قابلة للقراءة من المكررات.

fromWeb(ReadableStream<any>, Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">)

طريقة مفيدة لإنشاء من Readable الويب ReadableStream.

isDisturbed(ReadableStream<any> | ReadableStream)

يعيد ما إذا كان التدفق قد قرأ من أو تم إلغاؤه.

isPaused()

ترجع readable.isPaused() الطريقة الحالة التشغيلية الحالية ل .Readable يستخدم هذا بشكل أساسي من قبل الآلية التي تقوم عليها الطريقة readable.pipe() . في معظم الحالات المعتادة، لن يكون هناك سبب لاستخدام هذه الطريقة مباشرة.

const readable = new stream.Readable();

readable.isPaused(); // === false
readable.pause();
readable.isPaused(); // === true
readable.resume();
readable.isPaused(); // === false
iterator(ReadableIteratorOptions)

المكرر الذي يتم إنشاؤه بهذه الطريقة يمنح المستخدمين خيار إلغاء تدمير التدفق إذا خرجت الحلقة for await...of بواسطة return، breakأو ، أو throw، أو إذا كان يجب على المكرر تدمير التدفق إذا أصدر التدفق خطأ أثناء التكرار.

listenerCount(string | symbol, (args: any[]) => void)
listenerCount<E>(E, (args: ReadableEventMap[E]) => void)
listeners(string | symbol)
listeners<E>(E)
map((data: any, options?: Abortable) => any, ReadableOperatorOptions)

تسمح هذه الطريقة بالتعيين عبر التيار. سيتم استدعاء دالة fn لكل جزء في التدفق. إذا أعادت دالة fn وعدا - سيتم awaited ذلك الوعد قبل تمريره إلى تدفق النتائج.

off(string | symbol, (args: any[]) => void)
off<E>(E, (args: ReadableEventMap[E]) => void)
on(string | symbol, (args: any[]) => void)
on<E>(E, (args: ReadableEventMap[E]) => void)
once(string | symbol, (args: any[]) => void)
once<E>(E, (args: ReadableEventMap[E]) => void)
pause()

ستتسبب هذه الطريقة readable.pause() في توقف تدفق التيار عن 'data' إصدار الأحداث، مما يؤدي إلى الخروج من وضع التدفق. أي بيانات تصبح متاحة ستبقى في المخزن الداخلي.

const readable = getReadableStreamSomehow();
readable.on('data', (chunk) => {
  console.log(`Received ${chunk.length} bytes of data.`);
  readable.pause();
  console.log('There will be no additional data for 1 second.');
  setTimeout(() => {
    console.log('Now data will start flowing again.');
    readable.resume();
  }, 1000);
});

readable.pause() الطريقة لا تؤثر إذا كان 'readable' هناك مستمع للحدث.

prependListener(string | symbol, (args: any[]) => void)
prependListener<E>(E, (args: ReadableEventMap[E]) => void)
prependOnceListener(string | symbol, (args: any[]) => void)
prependOnceListener<E>(E, (args: ReadableEventMap[E]) => void)
push(any, BufferEncoding)
rawListeners(string | symbol)
rawListeners<E>(E)
read(number)

تقرأ الطريقة readable.read() البيانات من المخزن المؤقت الداخلي وتعيدها. إذا لم تتوفر بيانات للقراءة، null يتم إرجاعها. بشكل افتراضي، يتم إرجاع البيانات ككائن Buffer ما لم يتم تحديد ترميز باستخدام الطريقة readable.setEncoding() أو كان التدفق يعمل في وضع الكائن.

يحدد الوسيط الاختياري size عددا محددا من البايتات التي يجب قراءتها. إذا size لم تكن البايتات متاحة للقراءة، null فسيتم إرجاعها ما لم ينتهي التدفق، وفي هذه الحالة سيتم إرجاع جميع البيانات المتبقية في المخزن الداخلي.

إذا لم يتم تحديد الوسيط size ، فسيتم إرجاع جميع البيانات الموجودة في المخزن الداخلي.

يجب أن يكون الوسيط size أقل من أو يساوي 1 جيجابايت.

يجب استدعاء الطريقة readable.read() فقط على Readable التدفقات التي تعمل في وضع الإيقاف المؤقت. في وضع التدفق، readable.read() يتم استدعاء تلقائيا حتى يتم تفريغ المخزن الداخلي بالكامل.

const readable = getReadableStreamSomehow();

// 'readable' may be triggered multiple times as data is buffered in
readable.on('readable', () => {
  let chunk;
  console.log('Stream is readable (new data received in buffer)');
  // Use a loop to make sure we read all currently available data
  while (null !== (chunk = readable.read())) {
    console.log(`Read ${chunk.length} bytes of data...`);
  }
});

// 'end' will be triggered once when there is no more data available
readable.on('end', () => {
  console.log('Reached end of stream.');
});

كل استدعاء إلى readable.read() يعيد جزءا من البيانات، أو null. القطع غير متصلة بالتسلسل. while الحلقة ضرورية لاستهلاك جميع البيانات الموجودة حاليا في المخزن المؤقت. عند قراءة ملف .read() كبير قد يعود nullبعد أن استهلك كل المحتوى المخزن حتى الآن، لكن لا يزال هناك المزيد من البيانات التي لم يتم تخزينها بعد. في هذه الحالة، سيتم إصدار حدث جديد 'readable' عندما يكون هناك المزيد من البيانات في المخزن المؤقت. وأخيرا، سيتم إصدار الحدث 'end' عندما لا تتوفر بيانات أخرى.

لذلك، لقراءة محتوى الملف بالكامل من ، readableمن الضروري جمع القطع عبر عدة 'readable' أحداث:

const chunks = [];

readable.on('readable', () => {
  let chunk;
  while (null !== (chunk = readable.read())) {
    chunks.push(chunk);
  }
});

readable.on('end', () => {
  const content = chunks.join('');
});

التدفق Readable في وضع الكائن سيعيد دائما عنصرا واحدا من استدعاء إلى readable.read(size)، بغض النظر عن قيمة الوسيط size .

إذا readable.read() أعادت الطريقة جزءا من البيانات، 'data' فسيتم إصدار حدث أيضا.

سيتم إعادة nullقراءة المكالمة بعد 'end' إرسال الحدث. لن يظهر أي خطأ في وقت التشغيل.

reduce<T>((previous: any, data: any, options?: Abortable) => T)

تستدعي هذه الطريقة fn على كل جزء من التدفق بالترتيب، وتمرر له النتيجة من الحساب على العنصر السابق. يعيد وعدا بالقيمة النهائية للتخفيض.

إذا لم يتم توفير قيمة ابتدائية ، يستخدم الجزء الأول من التيار كقيمة ابتدائية. إذا كان التدفق فارغا، يتم رفض الوعد مع a TypeError مع ERR_INVALID_ARGS خاصية الرمز.

تقوم دالة المخفض بتكرار التيار عنصرا بعنصر، مما يعني أنه لا يوجد معامل التزامن أو التوازي. لإجراء التقليل في نفس الوقت، يمكنك استخراج الدالة غير المتزامنة إلى readable.map الطريقة.

reduce<T>((previous: T, data: any, options?: Abortable) => T, T, Abortable)
removeAllListeners(string | symbol)
removeAllListeners<E>(E)
removeListener(string | symbol, (args: any[]) => void)
removeListener<E>(E, (args: ReadableEventMap[E]) => void)
resume()

تؤدي هذه الطريقة readable.resume() إلى استئناف 'data' تدفق متوقف Readable صراحة لإصدار أحداث، مما يحول التدفق إلى وضع التدفق.

يمكن استخدام هذه readable.resume() الطريقة لاستهلاك البيانات بالكامل من تدفق دون معالجة أي من تلك البيانات:

getReadableStreamSomehow()
  .resume()
  .on('end', () => {
    console.log('Reached the end, but did not read anything.');
  });

readable.resume() الطريقة لا تؤثر إذا كان 'readable' هناك مستمع للحدث.

setEncoding(BufferEncoding)

تحدد الطريقة readable.setEncoding() ترميز الأحرف للبيانات المقروءة Readable من التدفق.

بشكل افتراضي، لا يتم تعيين ترميز وسيتم إرجاع بيانات التدفق ككائنات Buffer . تعيين ترميز يؤدي إلى إرجاع بيانات التدفق كسلاسل من الترميز المحدد بدلا من كائنات Buffer . على سبيل المثال، سيؤدي الاستدعاء readable.setEncoding('utf8') إلى تفسير بيانات الناتج كبيانات UTF-8، وتمريرها كسلاسل نصية. النداء readable.setEncoding('hex') يؤدي إلى ترميز البيانات بصيغة السلسلة السداسية عشرية.

سيتعامل التدفق Readable بشكل صحيح مع الأحرف متعددة البايتات التي ترسل عبر التدفق والتي كانت ستصبح غير مشفرة بشكل صحيح إذا تم سحبها ببساطة من التدفق ككائنات Buffer .

const readable = getReadableStreamSomehow();
readable.setEncoding('utf8');
readable.on('data', (chunk) => {
  assert.equal(typeof chunk, 'string');
  console.log('Got %d characters of string data:', chunk.length);
});
some((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.some وتستدعي fn على كل جزء في التدفق حتى تكون true قيمة العائد المنتظرة (أو أي قيمة تروثي). بمجرد أن يكون استدعاء fn على قيمة إرجاع جزء awaitمن ال Truey، يتم تدمير التدفق ويتحقق الوعد ب true. إذا لم تعط أي من استدعاءات fn على القطع قيمة حقيقية، يتم الوفاء بالوعد ب false.

take(number, Abortable)

تعيد هذه الطريقة تدفقا جديدا مع أول قطع حدي .

toArray(Abortable)

تسمح هذه الطريقة بالحصول بسهولة على محتويات التدفق الكهربائي.

وبما أن هذه الطريقة تقرأ التدفق بالكامل إلى الذاكرة، فإنها تلغي فوائد التدفقات. الهدف منها التوافق والراحة، وليس كطريقة أساسية لاستهلاك التدفقات.

toWeb(ReadableStream, ReadableToWebOptions)

طريقة مفيدة لإنشاء ويب ReadableStream من Readable.

unpipe(WritableStream)

تقوم الطريقة readable.unpipe() بفصل تيار كان Writable قد تم توصيله سابقا باستخدام طريقة الأنبوب .

إذا لم يتم تحديد الموضوع destination ، يتم فصل جميع الأنابيب.

إذا تم تحديد ال لكن destination لم يتم إعداد أنبوب لذلك، فإن الطريقة لا تفعل شيئا.

import fs from 'node:fs';
const readable = getReadableStreamSomehow();
const writable = fs.createWriteStream('file.txt');
// All the data from readable goes into 'file.txt',
// but only for the first second.
readable.pipe(writable);
setTimeout(() => {
  console.log('Stop writing to file.txt.');
  readable.unpipe(writable);
  console.log('Manually close the file stream.');
  writable.end();
}, 1000);
unshift(any, BufferEncoding)

تمرير chunk ك null يشير إلى نهاية التدفق (EOF) ويتصرف بنفس الطريقة readable.push(null)التي ، وبعدها لا يمكن كتابة بيانات أخرى. يتم وضع إشارة EOF في نهاية المخزن المؤقت وأي بيانات مخزنة ستظل تغسل.

readable.unshift() تدفع هذه الطريقة جزءا من البيانات إلى المخزن الداخلي. وهذا مفيد في بعض الحالات التي يستهلك فيها التيار بواسطة كود يحتاج إلى "إلغاء استهلاك" كمية معينة من البيانات التي سحبها بتفاؤل من المصدر، حتى يمكن تمرير البيانات إلى طرف آخر.

لا يمكن استدعاء الطريقة stream.unshift(chunk) بعد إصدار الحدث 'end' وإلا سيتم إلقاء خطأ في وقت التشغيل.

يجب على المطورين الذين يستخدمون stream.unshift() البث بشكل متكرر التفكير في التحول إلى استخدام Transform البث بدلا من ذلك. راجع القسم API for stream implementers لمزيد من المعلومات.

// Pull off a header delimited by \n\n.
// Use unshift() if we get too much.
// Call the callback with (error, header, stream).
import { StringDecoder } from 'node:string_decoder';
function parseHeader(stream, callback) {
  stream.on('error', callback);
  stream.on('readable', onReadable);
  const decoder = new StringDecoder('utf8');
  let header = '';
  function onReadable() {
    let chunk;
    while (null !== (chunk = stream.read())) {
      const str = decoder.write(chunk);
      if (str.includes('\n\n')) {
        // Found the header boundary.
        const split = str.split(/\n\n/);
        header += split.shift();
        const remaining = split.join('\n\n');
        const buf = Buffer.from(remaining, 'utf8');
        stream.removeListener('error', callback);
        // Remove the 'readable' listener before unshifting.
        stream.removeListener('readable', onReadable);
        if (buf.length)
          stream.unshift(buf);
        // Now the body of the message can be read from the stream.
        callback(null, header, stream);
        return;
      }
      // Still reading the header.
      header += str;
    }
  }
}

على عكس الدفع، stream.unshift(chunk) لن ينهي عملية القراءة عن طريق إعادة ضبط حالة القراءة الداخلية للبث. يمكن أن يسبب ذلك نتائج غير متوقعة إذا readable.unshift() تم استدعاؤه أثناء القراءة (أي من داخل تنفيذ _read على تدفق مخصص). اتباع النداء بالضغطreadable.unshift() الفوري سيعيد ضبط حالة القراءة بشكل مناسب، لكن من الأفضل تجنب الاتصال readable.unshift() أثناء إجراء القراءة.

wrap(ReadableStream)

قبل Node.js 0.10، لم تكن التدفقات تنفذ واجهة برمجة تطبيقات الوحدة بالكامل node:stream كما هي معرفة حاليا. (انظر Compatibility لمزيد من المعلومات.)

عند استخدام مكتبة Node.js قديمة تصدر 'data' أحداثا ولديها طريقة توقف مؤقت تعتمد فقط على التوجيه، يمكن استخدام هذه readable.wrap() الطريقة لإنشاء تدفق Readable يستخدم التدفق القديم كمصدر بيانات.

نادرا ما تكون ضرورية للاستخدام readable.wrap() ، لكن الطريقة تم توفيرها كوسيلة للتفاعل مع تطبيقات ومكتبات Node.js القديمة.

import { OldReader } from './old-api-module.js';
import { Readable } from 'node:stream';
const oreader = new OldReader();
const myReader = new Readable().wrap(oreader);

myReader.on('readable', () => {
  myReader.read(); // etc.
});
[asyncIterator]()

الأساليب المتوارثة

eventNames()

إرجاع صفيف يسرد الأحداث التي قام المرسل بتسجيل المستمعين لها.

import { EventEmitter } from 'node:events';

const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});

const sym = Symbol('symbol');
myEE.on(sym, () => {});

console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
getMaxListeners()

إرجاع قيمة وحدة الإصغاء القصوى الحالية EventEmitter التي تم تعيينها إما بواسطة emitter.setMaxListeners(n) أو الإعدادات الافتراضية إلى events.defaultMaxListeners.

pipe<T>(T, PipeOptions)
setMaxListeners(number)

بشكل افتراضي، ستقوم EventEmitters بطباعة تحذير إذا تمت إضافة أكثر من 10 وحدة استماع لحدث معين. هذا افتراضي مفيد يساعد في العثور على تسرب الذاكرة. يسمح الأسلوب emitter.setMaxListeners() بتعديل الحد لهذا المثيل EventEmitter المحدد. يمكن تعيين القيمة إلى Infinity (أو 0) للإشارة إلى عدد غير محدود من المستمعين.

إرجاع مرجع إلى EventEmitter، بحيث يمكن ربط الاستدعاءات.

[captureRejectionSymbol](Error, string | symbol, any[])

يتم استدعاء هذه Symbol.for('nodejs.rejection') الطريقة في حال حدوث رفض وعد عند إصدار حدث ويتم captureRejections تفعيله على الباعث. من الممكن استخدامه events.captureRejectionSymbol بدلا من Symbol.for('nodejs.rejection').

import { EventEmitter, captureRejectionSymbol } from 'node:events';

class MyClass extends EventEmitter {
  constructor() {
    super({ captureRejections: true });
  }

  [captureRejectionSymbol](err, event, ...args) {
    console.log('rejection happened for', event, 'with', err, ...args);
    this.destroy(err);
  }

  destroy(err) {
    // Tear the resource down here.
  }
}

تفاصيل المنشئ

Readable(ReadableOptions<Readable>)

new Readable(options?: ReadableOptions<Readable>)

المعلمات

options

ReadableOptions<Readable>

تفاصيل الخاصية

closed

لقد تم إصدار الخبر true بعد 'close' ذلك.

closed: boolean

قيمة الخاصية

boolean

destroyed

تم استدعاء بعد truereadable.destroy() ذلك.

destroyed: boolean

قيمة الخاصية

boolean

errored

يرجع خطأ إذا تم تدمير التدفق مع وجود خطأ.

errored: null | Error

قيمة الخاصية

null | Error

readable

هل true من الآمن استدعاء القراءة'error' الصحيحة، مما يعني أن التدفق لم يتم تدميره أو انبعاث أو 'end'.

readable: boolean

قيمة الخاصية

boolean

readableAborted

يرجع ما إذا كان التدفق قد تم تدميره أو تم تعرضه للخطأ قبل إصدار 'end'.

readableAborted: boolean

قيمة الخاصية

boolean

readableDidRead

يعود ما إذا 'data' كان قد تم إصداره.

readableDidRead: boolean

قيمة الخاصية

boolean

readableEncoding

الحصول على خاصية encoding تيار معين Readable . يمكن تعيين الخاصية encoding باستخدام طريقة setEncoding (الترميز ).

readableEncoding: null | BufferEncoding

قيمة الخاصية

null | BufferEncoding

readableEnded

يصبح true عندما 'end' يصدر الحدث.

readableEnded: boolean

قيمة الخاصية

boolean

readableFlowing

تعكس هذه الخاصية الحالة الحالية للجدول Readable كما هو موضح في قسم الحالات الثلاث .

readableFlowing: null | boolean

قيمة الخاصية

null | boolean

readableHighWaterMark

يعيد قيمة تم تمريرها highWaterMark عند إنشاء هذا Readable.

readableHighWaterMark: number

قيمة الخاصية

number

readableLength

تحتوي هذه الخاصية على عدد البايتات (أو الكائنات) في قائمة الانتظار الجاهزة للقراءة. توفر القيمة بيانات استبطانية حول حالة highWaterMark.

readableLength: number

قيمة الخاصية

number

readableObjectMode

الحصول على خاصية objectMode تيار معين Readable .

readableObjectMode: boolean

قيمة الخاصية

boolean

تفاصيل الأسلوب

addListener(string | symbol, (args: any[]) => void)

function addListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

addListener<E>(E, (args: ReadableEventMap[E]) => void)

function addListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

compose(WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, Abortable)

import { Readable } from 'node:stream';

async function* splitToWords(source) {
  for await (const chunk of source) {
    const words = String(chunk).split(' ');

    for (const word of words) {
      yield word;
    }
  }
}

const wordsStream = Readable.from(['text passed through', 'composed stream']).compose(splitToWords);
const words = await wordsStream.toArray();

console.log(words); // prints ['text', 'passed', 'through', 'composed', 'stream']

readable.compose(s) يُعادل stream.compose(readable, s).

تسمح هذه الطريقة أيضا بتوفير ال () AbortSignal الذي سيدمر التدفق المركب عند الإجهاض.

راجع stream.compose(...streams) لمزيد من المعلومات.

function compose(stream: WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, options?: Abortable): Duplex

المعلمات

stream

WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void

options

Abortable

المرتجعات

Duplex

جدول مكون من التيار stream.

destroy(Error)

تدمير الدفق. اختياريا، تصدر 'error' حدثا، وتقوم 'close' بإصدار حدث (إلا إذا emitClose تم ضبطه على false). بعد هذه المكالمة، سيطلق التدفق القابل للقراءة أي موارد داخلية وسيتم تجاهل المكالمات اللاحقة إليها push() .

بمجرد destroy() استدعاء أي استدعاءات أخرى ستكون no-op ولا يمكن إصدار أخطاء أخرى باستثناء من _destroy() ك 'error'.

يجب ألا يتجاوز المنفذون هذه الطريقة، بل ينفذون readable._destroy().

function destroy(error?: Error): Readable

المعلمات

error

Error

خطأ سيتم تمريره كحمولة في 'error' الحدث

المرتجعات

drop(number, Abortable)

تعيد هذه الطريقة تدفقا جديدا مع أول قطع حد تم حذفها من البداية.

function drop(limit: number, options?: Abortable): Readable

المعلمات

limit

number

عدد الأجزاء التي يجب إسقاطها من النسخة المقروءة.

options

Abortable

المرتجعات

تدفق مع قطع حديدية سقط من البداية.

emit(string | symbol, any[])

function emit(eventName: string | symbol, args: any[]): boolean

المعلمات

eventName

string | symbol

args

any[]

المرتجعات

boolean

emit<E>(E, ReadableEventMap[E])

function emit<E>(eventName: E, args: ReadableEventMap[E]): boolean

المعلمات

eventName

E

args

ReadableEventMap[E]

المرتجعات

boolean

every((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.every و تستدعي fn على كل جزء في التدفق للتحقق مما إذا كانت جميع قيم الإرجاع المنتظرة هي قيمة حقيقية ل fn. بمجرد أن يكون استدعاء fn على قيمة إرجاع جزء awaitومستوى خاطئ، يتم تدمير التدفق ويتحقق الوعد ب false. إذا أعادت جميع استدعاءات fn على الأجزاء قيمة حقيقية، يتم تحقيق الوعد ب true.

function every(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<boolean>

المعلمات

fn

(data: any, options?: Abortable) => boolean | Promise<boolean>

دالة تستدعي كل جزء من التيار. سواء كان ذلك غير متزامن أم لا.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

Promise<boolean>

وعد يقيم إذا كانت trueFN تعود بقيمة حقيقية لكل جزء من القطع.

filter((data: any, options?: Abortable) => boolean | Promise<boolean>, ReadableOperatorOptions)

تسمح هذه الطريقة بتصفية التدفق. لكل جزء في التدفق سيتم استدعاء دالة fn وإذا أعادت قيمة تروثي، سيتم تمرير القطعة إلى تدفق النتيجة. إذا أعادت دالة fn وعدا - فسيكون awaitذلك الوعد ed.

function filter(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: ReadableOperatorOptions): Readable

المعلمات

fn

(data: any, options?: Abortable) => boolean | Promise<boolean>

دالة لتصفية الأجزاء من التدفق. سواء كان ذلك غير متزامن أم لا.

options

ReadableOperatorOptions

المرتجعات

تيار مفلتر بالمسند FN.

find((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

function find(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<any>

المعلمات

fn

(data: any, options?: Abortable) => boolean | Promise<boolean>

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

Promise<any>

find<T>((data: any, options?: Abortable) => data, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.find وتستدعي fn على كل جزء في التدفق لإيجاد قطعة ذات قيمة حقيقية ل fn. بمجرد أن تصبح قيمة العودة المنتظرة لنداء fn هي Truthy، يتم تدمير البث ويتحقق الوعد بقيمة أعاد fn قيمة truthy. إذا أعادت جميع استدعاءات fn على الأجزاء قيمة زائفة، يتم الوفاء بالوعد ب undefined.

function find<T>(fn: (data: any, options?: Abortable) => data, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<undefined | T>

المعلمات

fn

(data: any, options?: Abortable) => data

دالة تستدعي كل جزء من التيار. سواء كان ذلك غير متزامن أم لا.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

Promise<undefined | T>

وعد يقيم أول جزء يقيم FN بقيمة حقيقية، أو undefined إذا لم يعثر على عنصر.

flatMap((data: any, options?: Abortable) => any, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

تعيد هذه الطريقة تدفقا جديدا عن طريق تطبيق الاستدعاء المعطى على كل جزء من التدفق ثم تسطيح النتيجة.

من الممكن إرجاع تدفق أو تكرار متكرر أو غير متزامن من fn وسيتم دمج (تسطيح) التدفقات الناتجة في التدفق المعاد الآن.

function flatMap(fn: (data: any, options?: Abortable) => any, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Readable

المعلمات

fn

(data: any, options?: Abortable) => any

دالة لرسم خريطة كل جزء في التيار. قد يكون غير متزامن. قد يكون تيارا أو مولدا.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

مجرى مسطح مرسوم بالدالة fn.

forEach((data: any, options?: Abortable) => void | Promise<void>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

تسمح هذه الطريقة بتكرار التدفق. لكل جزء في التدفق سيتم استدعاء دالة fn . إذا أعادت دالة fn وعدا - فسيكون awaitذلك الوعد ed.

تختلف هذه الطريقة عن for await...of الحلقات في أنها يمكنها معالجة الأجزاء بشكل اختياري في نفس الوقت. بالإضافة إلى ذلك، لا يمكن إيقاف التكرار forEach إلا بعد اجتياز خيار وإلغاء signal AbortController المرتبط بينما for await...of يمكن إيقافه باستخدام break أو return. في كلتا الحالتين سيتم تدمير التيار.

تختلف هذه الطريقة عن الاستماع إلى الحدث 'data' لأنها تستخدم الحدث readable في الآلية الأساسية ويمكنها تحديد عدد مكالمات fn المتزامنة.

function forEach(fn: (data: any, options?: Abortable) => void | Promise<void>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<void>

المعلمات

fn

(data: any, options?: Abortable) => void | Promise<void>

دالة تستدعي كل جزء من التيار. سواء كان ذلك غير متزامن أم لا.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

Promise<void>

وعد عندما ينتهي البث.

from(Iterable<any> | AsyncIterable<any>, ReadableOptions<Readable>)

طريقة مساعدة لإنشاء تدفقات قابلة للقراءة من المكررات.

static function from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions<Readable>): Readable

المعلمات

iterable

Iterable<any> | AsyncIterable<any>

كائن ينفذ Symbol.asyncIterator البروتوكول أو Symbol.iterator التكرار. يصدر حدث 'خطأ' إذا تم تمرير قيمة فارغة.

options

ReadableOptions<Readable>

الخيارات متاحة ل new stream.Readable([options]). افتراضيا، Readable.from() سيتم تعيين options.objectMode على true، إلا إذا تم إلغاء ذلك صراحة بتعيين options.objectMode .false

المرتجعات

fromWeb(ReadableStream<any>, Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">)

طريقة مفيدة لإنشاء من Readable الويب ReadableStream.

static function fromWeb(readableStream: ReadableStream<any>, options?: Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">): Readable

المعلمات

readableStream

ReadableStream<any>

options

Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">

المرتجعات

isDisturbed(ReadableStream<any> | ReadableStream)

يعيد ما إذا كان التدفق قد قرأ من أو تم إلغاؤه.

static function isDisturbed(stream: ReadableStream<any> | ReadableStream): boolean

المعلمات

stream

ReadableStream<any> | ReadableStream

المرتجعات

boolean

isPaused()

ترجع readable.isPaused() الطريقة الحالة التشغيلية الحالية ل .Readable يستخدم هذا بشكل أساسي من قبل الآلية التي تقوم عليها الطريقة readable.pipe() . في معظم الحالات المعتادة، لن يكون هناك سبب لاستخدام هذه الطريقة مباشرة.

const readable = new stream.Readable();

readable.isPaused(); // === false
readable.pause();
readable.isPaused(); // === true
readable.resume();
readable.isPaused(); // === false
function isPaused(): boolean

المرتجعات

boolean

iterator(ReadableIteratorOptions)

المكرر الذي يتم إنشاؤه بهذه الطريقة يمنح المستخدمين خيار إلغاء تدمير التدفق إذا خرجت الحلقة for await...of بواسطة return، breakأو ، أو throw، أو إذا كان يجب على المكرر تدمير التدفق إذا أصدر التدفق خطأ أثناء التكرار.

function iterator(options?: ReadableIteratorOptions): AsyncIterator<any, undefined, any>

المعلمات

options

ReadableIteratorOptions

المرتجعات

AsyncIterator<any, undefined, any>

listenerCount(string | symbol, (args: any[]) => void)

function listenerCount(eventName: string | symbol, listener?: (args: any[]) => void): number

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

number

listenerCount<E>(E, (args: ReadableEventMap[E]) => void)

function listenerCount<E>(eventName: E, listener?: (args: ReadableEventMap[E]) => void): number

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

number

listeners(string | symbol)

function listeners(eventName: string | symbol): (args: any[]) => void[]

المعلمات

eventName

string | symbol

المرتجعات

(args: any[]) => void[]

listeners<E>(E)

function listeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]

المعلمات

eventName

E

المرتجعات

(args: ReadableEventMap[E]) => void[]

map((data: any, options?: Abortable) => any, ReadableOperatorOptions)

تسمح هذه الطريقة بالتعيين عبر التيار. سيتم استدعاء دالة fn لكل جزء في التدفق. إذا أعادت دالة fn وعدا - سيتم awaited ذلك الوعد قبل تمريره إلى تدفق النتائج.

function map(fn: (data: any, options?: Abortable) => any, options?: ReadableOperatorOptions): Readable

المعلمات

fn

(data: any, options?: Abortable) => any

دالة لرسم خريطة كل جزء في التيار. سواء كان ذلك غير متزامن أم لا.

options

ReadableOperatorOptions

المرتجعات

تيار يتم رسمها بدالة fn.

off(string | symbol, (args: any[]) => void)

function off(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

off<E>(E, (args: ReadableEventMap[E]) => void)

function off<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

on(string | symbol, (args: any[]) => void)

function on(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

on<E>(E, (args: ReadableEventMap[E]) => void)

function on<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

once(string | symbol, (args: any[]) => void)

function once(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

once<E>(E, (args: ReadableEventMap[E]) => void)

function once<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

pause()

ستتسبب هذه الطريقة readable.pause() في توقف تدفق التيار عن 'data' إصدار الأحداث، مما يؤدي إلى الخروج من وضع التدفق. أي بيانات تصبح متاحة ستبقى في المخزن الداخلي.

const readable = getReadableStreamSomehow();
readable.on('data', (chunk) => {
  console.log(`Received ${chunk.length} bytes of data.`);
  readable.pause();
  console.log('There will be no additional data for 1 second.');
  setTimeout(() => {
    console.log('Now data will start flowing again.');
    readable.resume();
  }, 1000);
});

readable.pause() الطريقة لا تؤثر إذا كان 'readable' هناك مستمع للحدث.

function pause(): Readable

المرتجعات

prependListener(string | symbol, (args: any[]) => void)

function prependListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

prependListener<E>(E, (args: ReadableEventMap[E]) => void)

function prependListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

prependOnceListener(string | symbol, (args: any[]) => void)

function prependOnceListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

prependOnceListener<E>(E, (args: ReadableEventMap[E]) => void)

function prependOnceListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

push(any, BufferEncoding)

function push(chunk: any, encoding?: BufferEncoding): boolean

المعلمات

chunk

any

encoding

BufferEncoding

المرتجعات

boolean

rawListeners(string | symbol)

function rawListeners(eventName: string | symbol): (args: any[]) => void[]

المعلمات

eventName

string | symbol

المرتجعات

(args: any[]) => void[]

rawListeners<E>(E)

function rawListeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]

المعلمات

eventName

E

المرتجعات

(args: ReadableEventMap[E]) => void[]

read(number)

تقرأ الطريقة readable.read() البيانات من المخزن المؤقت الداخلي وتعيدها. إذا لم تتوفر بيانات للقراءة، null يتم إرجاعها. بشكل افتراضي، يتم إرجاع البيانات ككائن Buffer ما لم يتم تحديد ترميز باستخدام الطريقة readable.setEncoding() أو كان التدفق يعمل في وضع الكائن.

يحدد الوسيط الاختياري size عددا محددا من البايتات التي يجب قراءتها. إذا size لم تكن البايتات متاحة للقراءة، null فسيتم إرجاعها ما لم ينتهي التدفق، وفي هذه الحالة سيتم إرجاع جميع البيانات المتبقية في المخزن الداخلي.

إذا لم يتم تحديد الوسيط size ، فسيتم إرجاع جميع البيانات الموجودة في المخزن الداخلي.

يجب أن يكون الوسيط size أقل من أو يساوي 1 جيجابايت.

يجب استدعاء الطريقة readable.read() فقط على Readable التدفقات التي تعمل في وضع الإيقاف المؤقت. في وضع التدفق، readable.read() يتم استدعاء تلقائيا حتى يتم تفريغ المخزن الداخلي بالكامل.

const readable = getReadableStreamSomehow();

// 'readable' may be triggered multiple times as data is buffered in
readable.on('readable', () => {
  let chunk;
  console.log('Stream is readable (new data received in buffer)');
  // Use a loop to make sure we read all currently available data
  while (null !== (chunk = readable.read())) {
    console.log(`Read ${chunk.length} bytes of data...`);
  }
});

// 'end' will be triggered once when there is no more data available
readable.on('end', () => {
  console.log('Reached end of stream.');
});

كل استدعاء إلى readable.read() يعيد جزءا من البيانات، أو null. القطع غير متصلة بالتسلسل. while الحلقة ضرورية لاستهلاك جميع البيانات الموجودة حاليا في المخزن المؤقت. عند قراءة ملف .read() كبير قد يعود nullبعد أن استهلك كل المحتوى المخزن حتى الآن، لكن لا يزال هناك المزيد من البيانات التي لم يتم تخزينها بعد. في هذه الحالة، سيتم إصدار حدث جديد 'readable' عندما يكون هناك المزيد من البيانات في المخزن المؤقت. وأخيرا، سيتم إصدار الحدث 'end' عندما لا تتوفر بيانات أخرى.

لذلك، لقراءة محتوى الملف بالكامل من ، readableمن الضروري جمع القطع عبر عدة 'readable' أحداث:

const chunks = [];

readable.on('readable', () => {
  let chunk;
  while (null !== (chunk = readable.read())) {
    chunks.push(chunk);
  }
});

readable.on('end', () => {
  const content = chunks.join('');
});

التدفق Readable في وضع الكائن سيعيد دائما عنصرا واحدا من استدعاء إلى readable.read(size)، بغض النظر عن قيمة الوسيط size .

إذا readable.read() أعادت الطريقة جزءا من البيانات، 'data' فسيتم إصدار حدث أيضا.

سيتم إعادة nullقراءة المكالمة بعد 'end' إرسال الحدث. لن يظهر أي خطأ في وقت التشغيل.

function read(size?: number): any

المعلمات

size

number

وسيط اختياري لتحديد كمية البيانات التي يجب قراءتها.

المرتجعات

any

reduce<T>((previous: any, data: any, options?: Abortable) => T)

تستدعي هذه الطريقة fn على كل جزء من التدفق بالترتيب، وتمرر له النتيجة من الحساب على العنصر السابق. يعيد وعدا بالقيمة النهائية للتخفيض.

إذا لم يتم توفير قيمة ابتدائية ، يستخدم الجزء الأول من التيار كقيمة ابتدائية. إذا كان التدفق فارغا، يتم رفض الوعد مع a TypeError مع ERR_INVALID_ARGS خاصية الرمز.

تقوم دالة المخفض بتكرار التيار عنصرا بعنصر، مما يعني أنه لا يوجد معامل التزامن أو التوازي. لإجراء التقليل في نفس الوقت، يمكنك استخراج الدالة غير المتزامنة إلى readable.map الطريقة.

function reduce<T>(fn: (previous: any, data: any, options?: Abortable) => T): Promise<T>

المعلمات

fn

(previous: any, data: any, options?: Abortable) => T

دالة مخفض تستدعي كل جزء في التيار. سواء كان ذلك غير متزامن أم لا.

المرتجعات

Promise<T>

وعد بالقيمة النهائية للتخفيض.

reduce<T>((previous: T, data: any, options?: Abortable) => T, T, Abortable)

function reduce<T>(fn: (previous: T, data: any, options?: Abortable) => T, initial: T, options?: Abortable): Promise<T>

المعلمات

fn

(previous: T, data: any, options?: Abortable) => T

initial

T

options

Abortable

المرتجعات

Promise<T>

removeAllListeners(string | symbol)

function removeAllListeners(eventName?: string | symbol): Readable

المعلمات

eventName

string | symbol

المرتجعات

removeAllListeners<E>(E)

function removeAllListeners<E>(eventName?: E): Readable

المعلمات

eventName

E

المرتجعات

removeListener(string | symbol, (args: any[]) => void)

function removeListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

المعلمات

eventName

string | symbol

listener

(args: any[]) => void

المرتجعات

removeListener<E>(E, (args: ReadableEventMap[E]) => void)

function removeListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

المعلمات

eventName

E

listener

(args: ReadableEventMap[E]) => void

المرتجعات

resume()

تؤدي هذه الطريقة readable.resume() إلى استئناف 'data' تدفق متوقف Readable صراحة لإصدار أحداث، مما يحول التدفق إلى وضع التدفق.

يمكن استخدام هذه readable.resume() الطريقة لاستهلاك البيانات بالكامل من تدفق دون معالجة أي من تلك البيانات:

getReadableStreamSomehow()
  .resume()
  .on('end', () => {
    console.log('Reached the end, but did not read anything.');
  });

readable.resume() الطريقة لا تؤثر إذا كان 'readable' هناك مستمع للحدث.

function resume(): Readable

المرتجعات

setEncoding(BufferEncoding)

تحدد الطريقة readable.setEncoding() ترميز الأحرف للبيانات المقروءة Readable من التدفق.

بشكل افتراضي، لا يتم تعيين ترميز وسيتم إرجاع بيانات التدفق ككائنات Buffer . تعيين ترميز يؤدي إلى إرجاع بيانات التدفق كسلاسل من الترميز المحدد بدلا من كائنات Buffer . على سبيل المثال، سيؤدي الاستدعاء readable.setEncoding('utf8') إلى تفسير بيانات الناتج كبيانات UTF-8، وتمريرها كسلاسل نصية. النداء readable.setEncoding('hex') يؤدي إلى ترميز البيانات بصيغة السلسلة السداسية عشرية.

سيتعامل التدفق Readable بشكل صحيح مع الأحرف متعددة البايتات التي ترسل عبر التدفق والتي كانت ستصبح غير مشفرة بشكل صحيح إذا تم سحبها ببساطة من التدفق ككائنات Buffer .

const readable = getReadableStreamSomehow();
readable.setEncoding('utf8');
readable.on('data', (chunk) => {
  assert.equal(typeof chunk, 'string');
  console.log('Got %d characters of string data:', chunk.length);
});
function setEncoding(encoding: BufferEncoding): Readable

المعلمات

encoding

BufferEncoding

الترميز لاستخدامه.

المرتجعات

some((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

هذه الطريقة مشابهة ل Array.prototype.some وتستدعي fn على كل جزء في التدفق حتى تكون true قيمة العائد المنتظرة (أو أي قيمة تروثي). بمجرد أن يكون استدعاء fn على قيمة إرجاع جزء awaitمن ال Truey، يتم تدمير التدفق ويتحقق الوعد ب true. إذا لم تعط أي من استدعاءات fn على القطع قيمة حقيقية، يتم الوفاء بالوعد ب false.

function some(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<boolean>

المعلمات

fn

(data: any, options?: Abortable) => boolean | Promise<boolean>

دالة تستدعي كل جزء من التيار. سواء كان ذلك غير متزامن أم لا.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

المرتجعات

Promise<boolean>

وعد يقيم true إذا كان FN يعيد قيمة تروثي لأحد الأجزاء على الأقل.

take(number, Abortable)

تعيد هذه الطريقة تدفقا جديدا مع أول قطع حدي .

function take(limit: number, options?: Abortable): Readable

المعلمات

limit

number

عدد الأجزاء التي يجب أخذها من القابلة للقراءة.

options

Abortable

المرتجعات

جدول مع قطع محددة تم أخذها.

toArray(Abortable)

تسمح هذه الطريقة بالحصول بسهولة على محتويات التدفق الكهربائي.

وبما أن هذه الطريقة تقرأ التدفق بالكامل إلى الذاكرة، فإنها تلغي فوائد التدفقات. الهدف منها التوافق والراحة، وليس كطريقة أساسية لاستهلاك التدفقات.

function toArray(options?: Abortable): Promise<any[]>

المعلمات

options

Abortable

المرتجعات

Promise<any[]>

وعد يحتوي على مصفوفة تحتوي على محتويات التدفق.

toWeb(ReadableStream, ReadableToWebOptions)

طريقة مفيدة لإنشاء ويب ReadableStream من Readable.

static function toWeb(streamReadable: ReadableStream, options?: ReadableToWebOptions): ReadableStream<any>

المعلمات

streamReadable

ReadableStream

options

ReadableToWebOptions

المرتجعات

ReadableStream<any>

unpipe(WritableStream)

تقوم الطريقة readable.unpipe() بفصل تيار كان Writable قد تم توصيله سابقا باستخدام طريقة الأنبوب .

إذا لم يتم تحديد الموضوع destination ، يتم فصل جميع الأنابيب.

إذا تم تحديد ال لكن destination لم يتم إعداد أنبوب لذلك، فإن الطريقة لا تفعل شيئا.

import fs from 'node:fs';
const readable = getReadableStreamSomehow();
const writable = fs.createWriteStream('file.txt');
// All the data from readable goes into 'file.txt',
// but only for the first second.
readable.pipe(writable);
setTimeout(() => {
  console.log('Stop writing to file.txt.');
  readable.unpipe(writable);
  console.log('Manually close the file stream.');
  writable.end();
}, 1000);
function unpipe(destination?: WritableStream): Readable

المعلمات

destination

WritableStream

تيار محدد اختياري لفصل الأنابيب

المرتجعات

unshift(any, BufferEncoding)

تمرير chunk ك null يشير إلى نهاية التدفق (EOF) ويتصرف بنفس الطريقة readable.push(null)التي ، وبعدها لا يمكن كتابة بيانات أخرى. يتم وضع إشارة EOF في نهاية المخزن المؤقت وأي بيانات مخزنة ستظل تغسل.

readable.unshift() تدفع هذه الطريقة جزءا من البيانات إلى المخزن الداخلي. وهذا مفيد في بعض الحالات التي يستهلك فيها التيار بواسطة كود يحتاج إلى "إلغاء استهلاك" كمية معينة من البيانات التي سحبها بتفاؤل من المصدر، حتى يمكن تمرير البيانات إلى طرف آخر.

لا يمكن استدعاء الطريقة stream.unshift(chunk) بعد إصدار الحدث 'end' وإلا سيتم إلقاء خطأ في وقت التشغيل.

يجب على المطورين الذين يستخدمون stream.unshift() البث بشكل متكرر التفكير في التحول إلى استخدام Transform البث بدلا من ذلك. راجع القسم API for stream implementers لمزيد من المعلومات.

// Pull off a header delimited by \n\n.
// Use unshift() if we get too much.
// Call the callback with (error, header, stream).
import { StringDecoder } from 'node:string_decoder';
function parseHeader(stream, callback) {
  stream.on('error', callback);
  stream.on('readable', onReadable);
  const decoder = new StringDecoder('utf8');
  let header = '';
  function onReadable() {
    let chunk;
    while (null !== (chunk = stream.read())) {
      const str = decoder.write(chunk);
      if (str.includes('\n\n')) {
        // Found the header boundary.
        const split = str.split(/\n\n/);
        header += split.shift();
        const remaining = split.join('\n\n');
        const buf = Buffer.from(remaining, 'utf8');
        stream.removeListener('error', callback);
        // Remove the 'readable' listener before unshifting.
        stream.removeListener('readable', onReadable);
        if (buf.length)
          stream.unshift(buf);
        // Now the body of the message can be read from the stream.
        callback(null, header, stream);
        return;
      }
      // Still reading the header.
      header += str;
    }
  }
}

على عكس الدفع، stream.unshift(chunk) لن ينهي عملية القراءة عن طريق إعادة ضبط حالة القراءة الداخلية للبث. يمكن أن يسبب ذلك نتائج غير متوقعة إذا readable.unshift() تم استدعاؤه أثناء القراءة (أي من داخل تنفيذ _read على تدفق مخصص). اتباع النداء بالضغطreadable.unshift() الفوري سيعيد ضبط حالة القراءة بشكل مناسب، لكن من الأفضل تجنب الاتصال readable.unshift() أثناء إجراء القراءة.

function unshift(chunk: any, encoding?: BufferEncoding)

المعلمات

chunk

any

قطعة بيانات لإعادة التحويل إلى قائمة القراءة. بالنسبة للتدفقات التي لا تعمل في وضع الكائن، chunk يجب أن تكون {string}، {Buffer}، {TypedArray}، {DataView} أو null. بالنسبة لتدفقات وضع الكائن، chunk قد تكون أي قيمة جافا سكريبت.

encoding

BufferEncoding

ترميز قطع السلاسل النصية. يجب أن يكون ترميزا صالحا Buffer ، مثل 'utf8' أو 'ascii'.

wrap(ReadableStream)

قبل Node.js 0.10، لم تكن التدفقات تنفذ واجهة برمجة تطبيقات الوحدة بالكامل node:stream كما هي معرفة حاليا. (انظر Compatibility لمزيد من المعلومات.)

عند استخدام مكتبة Node.js قديمة تصدر 'data' أحداثا ولديها طريقة توقف مؤقت تعتمد فقط على التوجيه، يمكن استخدام هذه readable.wrap() الطريقة لإنشاء تدفق Readable يستخدم التدفق القديم كمصدر بيانات.

نادرا ما تكون ضرورية للاستخدام readable.wrap() ، لكن الطريقة تم توفيرها كوسيلة للتفاعل مع تطبيقات ومكتبات Node.js القديمة.

import { OldReader } from './old-api-module.js';
import { Readable } from 'node:stream';
const oreader = new OldReader();
const myReader = new Readable().wrap(oreader);

myReader.on('readable', () => {
  myReader.read(); // etc.
});
function wrap(stream: ReadableStream): Readable

المعلمات

stream

ReadableStream

تيار "قديم الطراز" قابل للقراءة

المرتجعات

[asyncIterator]()

function [asyncIterator](): AsyncIterator<any, undefined, any>

المرتجعات

AsyncIterator<any, undefined, any>

AsyncIterator ليستهلك التيار بالكامل.

تفاصيل الأساليب المتوارثة

eventNames()

إرجاع صفيف يسرد الأحداث التي قام المرسل بتسجيل المستمعين لها.

import { EventEmitter } from 'node:events';

const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});

const sym = Symbol('symbol');
myEE.on(sym, () => {});

console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
function eventNames(): (string | symbol)[]

المرتجعات

(string | symbol)[]

الموروث من أسماء Stream.eventNames

getMaxListeners()

إرجاع قيمة وحدة الإصغاء القصوى الحالية EventEmitter التي تم تعيينها إما بواسطة emitter.setMaxListeners(n) أو الإعدادات الافتراضية إلى events.defaultMaxListeners.

function getMaxListeners(): number

المرتجعات

number

الموروث من Stream.getMaxListeners

pipe<T>(T, PipeOptions)

function pipe<T>(destination: T, options?: PipeOptions): T

المعلمات

destination

T

options

PipeOptions

المرتجعات

T

الموروث من Stream.pipe

setMaxListeners(number)

بشكل افتراضي، ستقوم EventEmitters بطباعة تحذير إذا تمت إضافة أكثر من 10 وحدة استماع لحدث معين. هذا افتراضي مفيد يساعد في العثور على تسرب الذاكرة. يسمح الأسلوب emitter.setMaxListeners() بتعديل الحد لهذا المثيل EventEmitter المحدد. يمكن تعيين القيمة إلى Infinity (أو 0) للإشارة إلى عدد غير محدود من المستمعين.

إرجاع مرجع إلى EventEmitter، بحيث يمكن ربط الاستدعاءات.

function setMaxListeners(n: number): Readable

المعلمات

n

number

المرتجعات

الموروث من Stream.setMaxListeners

[captureRejectionSymbol](Error, string | symbol, any[])

يتم استدعاء هذه Symbol.for('nodejs.rejection') الطريقة في حال حدوث رفض وعد عند إصدار حدث ويتم captureRejections تفعيله على الباعث. من الممكن استخدامه events.captureRejectionSymbol بدلا من Symbol.for('nodejs.rejection').

import { EventEmitter, captureRejectionSymbol } from 'node:events';

class MyClass extends EventEmitter {
  constructor() {
    super({ captureRejections: true });
  }

  [captureRejectionSymbol](err, event, ...args) {
    console.log('rejection happened for', event, 'with', err, ...args);
    this.destroy(err);
  }

  destroy(err) {
    // Tear the resource down here.
  }
}
function [captureRejectionSymbol](error: Error, event: string | symbol, args: any[])

المعلمات

error

Error

event

string | symbol

args

any[]

الموروث من Stream.__@captureRejectionSymbol@175