node.js - Node.js 中转换流的透明度
问题描述
我编写了一些适用于可读和可写流的代码。现在我想通过使用一些转换流向这些流添加转换。我写的代码,特别是错误传播,还能工作吗?背压应该由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
在这方面存在一些问题,但是当我不再需要它们时,我会关闭/销毁我使用的每个流。
解决方案
推荐阅读
- google-cloud-platform - 在 Google Cloud Platform 上的 URL 中隐藏“/index.html”
- php - php-fpm 和 dns 随机无法正常工作
- magento - 更改 Magento 2.2.4 的主题时出现错误“区域已设置”
- haskell - 找不到模块“Criterion.Main”
- xamarin - Xamarin Forms ToolbarItems 显示在错误的页面上
- android - 如何在 android 中使用 OpenID Connect 验证我的登录页面
- angular - NgModel 在 Angular 5 中无法正常工作
- python - 我将如何在 Python 上循环这个?
- node.js - 如何使用 WHERE 条件在 Postgres SELECT 查询中设置参数化值
- android-studio - Android Studio 3.2 Canary 12/14/15/16 没有 Github 集成