问题描述
我编写了一些适用于可读和可写流的代码。现在我想通过使用一些转换流向这些流添加转换。我写的代码,尤其是错误传播,还能工作吗? pipe
/pipeline
应该正确处理背压,但我不确定错误传播。
async function f(r,w) {
assert(r.isPaused());
...
r.on("data",dataListener);
const rCleanup = finished(r,err => ...);
w.on("drain",drainListener);
const wCleanup = finished(w,err => ...);
...
... r.pause() ... r.resume() ... r.pause() ...
...
... remove all listeners + cleanup
...
return new Promise(...);
}
该函数与“常规”可读和可写流完美配合。
现在让 t1
和 t2
是两个转换流。如果两个转换流都实现正确,下面的代码能用吗?
const r_t1 = r.pipe(t1);
r_t1.pause();
const t2_w = t2.pipe(w);
try {
await f(r_t1,t2_w);
} catch(err) {
...
}
现在可能有 4 点错误:r、w、t1、t2。他们会被正确抓住吗?
我应该改用 pipeline
吗?不过,我不需要回调,而且我担心这会干扰 finished
。
资源泄漏怎么办?我了解到 pipe
在这方面存在一些问题,但是当我不再需要它们时,我会关闭/销毁我使用的每个流。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)