readable.some(fn[, options])
稳定性: 1 - 实验性
fn<Function> | <AsyncFunction> 是一个在流的每个数据块上调用的函数。data<any> 从流中获取一块数据。options<Object>signal<AbortSignal> 如果流被销毁则中止,从而允许提前中止fn调用。
options<Object>concurrency<number> 是fn在流上同时调用的最大并发次数。默认值:1。signal<AbortSignal> 允许在信号被中止时销毁流。
- 返回:<Promise> 一个 Promise,如果
fn对至少一个块返回了真值,则该 Promise 的结果为true。
这种方法类似于 Array.prototype.some,会对流中的每个块调用 fn,直到等待的返回值为 true(或任何真值)。一旦对某个块调用 fn 的等待返回值为真,流就会被销毁,Promise 会以 true 作为结果完成。如果对所有块的 fn 调用都没有返回真值,Promise 会以 false 作为结果完成。
【This method is similar to Array.prototype.some and calls fn on each chunk
in the stream until the awaited return value is true (or any truthy value).
Once an fn call on a chunk awaited return value is truthy, the stream is
destroyed and the promise is fulfilled with true. If none of the fn
calls on the chunks return a truthy value, the promise is fulfilled with
false.】
import { Readable } from 'node:stream';
import { stat } from 'node:fs/promises';
// With a synchronous predicate.
await Readable.from([1, 2, 3, 4]).some((x) => x > 2); // true
await Readable.from([1, 2, 3, 4]).some((x) => x < 0); // false
// With an asynchronous predicate, making at most 2 file checks at a time.
const anyBigFile = await Readable.from([
'file1',
'file2',
'file3',
]).some(async (fileName) => {
const stats = await stat(fileName);
return stats.size > 1024 * 1024;
}, { concurrency: 2 });
console.log(anyBigFile); // `true` if any file in the list is bigger than 1MB
console.log('done'); // Stream has finished