gpt4 book ai didi

javascript - 在不控制读取流的情况下将转换流应用于写入流?

转载 作者:行者123 更新时间:2023-11-30 21:01:18 24 4
gpt4 key购买 nike

我有一个函数需要一个写入流,我向其提供以下流:

const logStream = fs.createWriteStream('./log.txt')

fn(logStream)

fn 是第三方模块提供的,所以我不控制它的实现。在内部,我知道 fn 最终会这样做:

// super simplified
fn (logStream) {
// ...

stream.pipe(logStream, { end: true })

// ...
}

我的问题是我知道读取流 stream 包含 ANSI 转义码,我不想将其输出到我的 log.txt。经过快速谷歌搜索后,我找到了 chalk/strip-ansi-stream ,这是一个旨在执行此操作的转换流。

因此,作为 Node 流的新手,我决定尝试将我的代码修改为:

const stripAnsiStream = require('strip-ansi-stream')

const logStream = fs.createWriteStream('./log.txt')

fn(stripAnsiStream().pipe(logStream))

... 这不起作用:我的日志文件仍然包含带有 ANSI 转义码 的内容。我认为这是因为不是创建像

这样的链
a.pipe(b).pipe(c)

我真的做到了

a.pipe(b.pipe(c))

如何在不控制提供读取流的管道链的开头的情况下将此转换流应用到我的写入流?

最佳答案

为了链接的目的,stream.pipe() 返回输入参数。 b.pipe(c)的返回值为c

当你调用fn(b.pipe(c))时,你实际上绕过了转换流b并输入了写入流c 直接。

案例#1:a.pipe(b.pipe(c))

b.pipe(c)
a.pipe(c)

案例#2:a.pipe(b).pipe(c)

a.pipe(b)
b.pipe(c)

转换流可以通过管道传输到日志流中,然后单独传递到模块中。您有效地使用了案例 #2,但以相反的顺序启动管道。

const stripAnsiStream = require('strip-ansi-stream')
const fn = require('my-third-party-module')

const transformStream = stripAnsiStream()
const logStream = fs.createWriteStream('./log.txt')

transformStream.pipe(logStream)
fn(transformStream)

关于javascript - 在不控制读取流的情况下将转换流应用于写入流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com