【发布时间】:2019-06-18 07:35:08
【问题描述】:
给定一个函数解析传入的流:
async onData(stream, callback) {
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
return callback()
}
我正在寻找一种简单且安全的方法来“克隆”该流,以便将其保存到文件中以进行调试,而不会影响代码。这可能吗?
假代码中的相同问题:我正在尝试做这样的事情。显然,这是一个虚构的例子,是行不通的。
const fs = require('fs')
const wstream = fs.createWriteStream('debug.log')
async onData(stream, callback) {
const debugStream = stream.clone(stream) // Fake code
wstream.write(debugStream)
const parsed = await simpleParser(stream)
// Code handling parsed stream here
// ...
wstream.end()
return callback()
}
【问题讨论】:
-
你为什么要克隆流,因为你仍然可以再次读取它
-
@0.sh 效率。
-
如果你没有调用
stream.close(),那么就不需要克隆流 -
@0.sh 真的这么简单吗?我想我需要
cloneable-readable之类的东西(我没有在我的答案中包含它以防止污染我将得到的答案) -
@0.sh 实际上你不能从同一个流中多次读取,只要第一次读取完成,流就会关闭,所有其他读取都将不完整