gpt4 book ai didi

javascript - 当目标流发出错误事件时,我们能否以某种方式重用源流?

转载 作者:行者123 更新时间:2023-11-30 15:54:48 25 4
gpt4 key购买 nike

我正在尝试实现以下错误处理:

  1. 假设我们有一个可读流。
  2. 我们将其通过管道传输到 transform 流中。
  3. transform 流以某种方式发出了一个错误
  4. 我们想恢复可读 流(及其所有数据),并将其重新传输到另一个transform 流。

第 4 步似乎很难:我可以在目标流(transform 流)上监听 unpipe 事件并检索对源流(可读 流),但至少丢失了一些数据 block 。

我们可以在不创建自定义转换流的情况下做到这一点吗?

一个真实世界的例子是deflate 内容编码,where in some cases ,您需要 zlib.createInflateRaw() 而不是 zlib.createInflate(),但是在查看响应主体缓冲区之前我们无法决定哪个是正确的选择.

最佳答案

您不需要为了读取第一个字节而在中间引入流。例如:

(function readChunk() {
var chunk = res.read();
if (!chunk)
return res.once('readable', readChunk);

var inflate;
if ((chunk[0] & 0x0F) === 0x08)
inflate = zlib.createInflate();
else
inflate = zlib.createInflateRaw();

// Put chunk back into stream
res.unshift(chunk);

// Prepare the decompression
res.pipe(inflate);

output = new Response(inflate, response_options);
resolve(output);
})();

此外,var body = res.pipe(new stream.PassThrough()); 是不必要的,您可以在适当的地方使用 res

关于javascript - 当目标流发出错误事件时,我们能否以某种方式重用源流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738462/

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