`fsPromise.writeFile` should catch stream's error and reject the promise.
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 122k
- 派生
- 37.3k
- 平均合并
- 4 天 2 小时
- 30 天内合并 PR
- 283
描述
Version
22.16.0
Platform
All
Subsystem
No response
What steps will reproduce the bug?
Following code fails with an application crash.
import fsp from "node:fs/promises";
import { createReadStream } from "node:fs";
try {
const s1 = createReadStream("not-existent");
await fsp.writeFile("new-file.txt", s1);
} catch (error) {
console.log(`Sorry file copy failed`);
}
Instead it should just say that an error has occurred and reject the promise.
How often does it reproduce? Is there a required condition?
Everytime
What is the expected behavior? Why is that the expected behavior?
The application should not crash and an error should be thrown.
What do you see instead?
Application Crashes.
Reproduction Repository
ackava/node-write-file-promise-fail
This repo contains docker container source code to reproduce error in container. On windows machine, delay causes app to crash but in container, slight delay of 1 ms causes crash.
Workaround
So far following code works correctly with slight time differences, and does not crash the app, promise is rejected correctly.
const writable = createWriteStream(outputFilePath);
return pipeline(inputStream, writable, { end: true });
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从复现中展示的 fsPromise.writeFile 和 createReadStream 入口点开始,然后将它们的错误处理与 pipeline 变通方案进行比较。使用链接的复现仓库重现崩溃,并验证缺少输入文件时 promise 会被 reject,而不是导致应用程序崩溃。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, nodejs
- 领域
- operating-systems
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100