readable.every(fn[, options])


稳定性: 1 - 实验

  • fn <Function> | <AsyncFunction> 调用流的每个块的函数。
    • data <any> 来自流的数据块。
    • options <Object>
      • signal <AbortSignal> 如果流被销毁则中止,允许提前中止 fn 调用。
  • options <Object>
    • concurrency <number> 一次调用流的最大并发调用 fn默认值: 1
    • signal <AbortSignal> 如果信号被中止,则允许销毁流。
  • 返回: <Promise> 如果 fn 返回所有块的真值,则对 true 进行评估的 promise。

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

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

// 使用同步谓词。
await Readable.from([1, 2, 3, 4]).every((x) => x > 2); // false
await Readable.from([1, 2, 3, 4]).every((x) => x > 0); // true

// 使用异步谓词,一次最多进行 2 个文件检查。
const allBigFiles = await Readable.from([
  'file1',
  'file2',
  'file3',
]).every(async (fileName) => {
  const stats = await stat(fileName);
  return stat.size > 1024 * 1024;
}, { concurrency: 2 });
// 如果列表中的所有文件都大于 1MiB,则为 `true`
console.log(allBigFiles);
console.log('done'); // 流已结束

Stability: 1 - Experimental

  • fn <Function> | <AsyncFunction> a function to call on each chunk of the stream.
    • data <any> a chunk of data from the stream.
    • options <Object>
      • signal <AbortSignal> aborted if the stream is destroyed allowing to abort the fn call early.
  • options <Object>
    • concurrency <number> the maximum concurrent invocation of fn to call on the stream at once. Default: 1.
    • signal <AbortSignal> allows destroying the stream if the signal is aborted.
  • Returns: <Promise> a promise evaluating to true if fn returned a truthy value for all of the chunks.

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