标准答案
- pipeline 在任一流失败时通知回调或 reject,并尝试销毁链路中的流。
- 仍要处理客户端提前断开、目标写入失败、超时和已产生的部分文件。
- pipeline 不会替业务自动回滚对象存储或数据库记录,副作用仍需状态和清理。
- 流对象的编码、结束和 backpressure 配置要与数据格式匹配。
题目解析
pipeline 会在链路失败时统一通知并尝试销毁相关流,比手动 pipe 更容易覆盖错误和关闭路径。它解决的是流的生命周期,不会撤销已经写入文件、对象存储或数据库的部分结果。
回调和 Promise 版本应选择一种错误出口,避免同时回调、reject 和重复记录。客户端断开、目标超时和部分写入要通过 AbortSignal 或状态记录传递。
文件上传等场景需要把临时对象、业务记录和最终状态分开管理。pipeline 失败后可以标记 failed 并异步清理,不能假设文件系统自动回滚。
常见误区
- 误区:以为 pipeline 失败会删除已写入文件。改正:设计临时对象、失败状态和可重试清理。
- 误区:回调和 Promise API 混用。改正:选择一个完成/错误出口,防止重复处理和重复响应。
- 误区:客户端断开后仍继续读取大文件。改正:监听 abort/close,停止可取消读取并释放句柄。