readable.every(fn[, options])


稳定性: 1 - 实验性的

¥Stability: 1 - Experimental

  • fn <Function> | <AsyncFunction> 调用流的每个块的函数。

    ¥fn <Function> | <AsyncFunction> a function to call on each chunk of the stream.

    • data <any> 来自流的数据块。

      ¥data <any> a chunk of data from the stream.

    • options <Object>

      • signal <AbortSignal> 如果流被销毁则中止,允许提前中止 fn 调用。

        ¥signal <AbortSignal> aborted if the stream is destroyed allowing to abort the fn call early.

  • options <Object>

    • concurrency <number> 一次调用流的 fn 的最大并发调用数。默认值:1

      ¥concurrency <number> the maximum concurrent invocation of fn to call on the stream at once. Default: 1.

    • signal <AbortSignal> 如果信号中止,允许销毁流。

      ¥signal <AbortSignal> allows destroying the stream if the signal is aborted.

  • 返回:如果 fn 返回所有块的真值,则 <Promise> 是评估 true 的 promise。

    ¥Returns: <Promise> a promise evaluating to true if fn returned a truthy value for all of the chunks.

此方法类似于 Array.prototype.every,并在流中的每个块上调用 fn,以检查所有等待的返回值是否为 fn 的真值。一旦对块等待返回值的 fn 调用是假的,流就会被销毁,并且 promise 会用 false 实现。如果对块的所有 fn 调用都返回真值,则 promise 通过 true 实现。

¥This method is similar to Array.prototype.every and calls fn on each chunk in the stream to check if all awaited return values are truthy value for fn. Once an fn call on a chunk awaited return value is falsy, the stream is destroyed and the promise is fulfilled with false. If all of the fn calls on the chunks return a truthy value, the promise is fulfilled with true.

import { Readable } from 'node:stream';
import { stat } from 'node:fs/promises';

// With a synchronous predicate.
await Readable.from([1, 2, 3, 4]).every((x) => x > 2); // false
await Readable.from([1, 2, 3, 4]).every((x) => x > 0); // true

// With an asynchronous predicate, making at most 2 file checks at a time.
const allBigFiles = await Readable.from([
  'file1',
  'file2',
  'file3',
]).every(async (fileName) => {
  const stats = await stat(fileName);
  return stat.size > 1024 * 1024;
}, { concurrency: 2 });
// `true` if all files in the list are bigger than 1MiB
console.log(allBigFiles);
console.log('done'); // Stream has finished