readable.map(fn[, options])
稳定性: 1 - 实验
fn
<Function> | <AsyncFunction> 映射流中每个块的函数。data
<any> 来自流的数据块。options
<Object>signal
<AbortSignal> 如果流被销毁则中止,允许提前中止fn
调用。
options
<Object>concurrency
<number> 一次调用流的最大并发调用fn
。 默认值:1
。signal
<AbortSignal> 如果信号被中止,则允许销毁流。
- 返回: <Readable> 使用函数
fn
映射的流。
此方法允许映射流。
将为流中的每个块调用 fn
函数。
如果 fn
函数返回 promise,则该 promise 将在被传到结果流之前被 await
。
import { Readable } from 'node:stream';
import { Resolver } from 'node:dns/promises';
// 使用同步映射器。
for await (const chunk of Readable.from([1, 2, 3, 4]).map((x) => x * 2)) {
console.log(chunk); // 2, 4, 6, 8
}
// 使用异步映射器,单次最多进行 2 个查询。
const resolver = new Resolver();
const dnsResults = Readable.from([
'nodejs.org',
'openjsf.org',
'www.linuxfoundation.org',
]).map((domain) => resolver.resolve4(domain), { concurrency: 2 });
for await (const result of dnsResults) {
console.log(result); // 记录 resolver.resolve4 的 DNS 结果。
}
Stability: 1 - Experimental
fn
<Function> | <AsyncFunction> a function to map over every chunk in the stream.data
<any> a chunk of data from the stream.options
<Object>signal
<AbortSignal> aborted if the stream is destroyed allowing to abort thefn
call early.
options
<Object>concurrency
<number> the maximum concurrent invocation offn
to call on the stream at once. Default:1
.signal
<AbortSignal> allows destroying the stream if the signal is aborted.
- Returns: <Readable> a stream mapped with the function
fn
.
This method allows mapping over the stream. The fn
function will be called
for every chunk in the stream. If the fn
function returns a promise - that
promise will be await
ed before being passed to the result stream.
import { Readable } from 'node:stream';
import { Resolver } from 'node:dns/promises';
// With a synchronous mapper.
for await (const chunk of Readable.from([1, 2, 3, 4]).map((x) => x * 2)) {
console.log(chunk); // 2, 4, 6, 8
}
// With an asynchronous mapper, making at most 2 queries at a time.
const resolver = new Resolver();
const dnsResults = Readable.from([
'nodejs.org',
'openjsf.org',
'www.linuxfoundation.org',
]).map((domain) => resolver.resolve4(domain), { concurrency: 2 });
for await (const result of dnsResults) {
console.log(result); // Logs the DNS result of resolver.resolve4.
}