node.js - 假设在“fs.writeFileStream”完成写入并在管道之后关闭文件后触发读取流“结束”事件是否安全?
问题描述
我对这些片段之间的最佳解决方案犹豫不决:
simple_client({
method: 'get',
path: key,
id: 'download'
})
.then(req => new Promise((resolve, reject) => {
const write_stream = fs.createWriteStream(path);
req.on('result', (err, res) => {
if (err) {
reject(err);
}
res.pipe(write_stream);
res.on('end', () => {
console.log('Done!');
resolve();
});
});
req.end();
}))
.then(() => {
console.log(`Is it safe to touch ${path} file here?`);
});
或者
simple_client({
method: 'get',
path: key,
id: 'download'
})
.then(req => new Promise((resolve, reject) => {
const write_stream = fs.createWriteStream(path);
req.on('result', (err, res) => {
if (err) {
reject(err);
}
res.pipe(write_stream);
write_stream.on('finish', () => {
console.log('Done!');
resolve();
});
});
req.end();
}))
.then(() => {
console.log(`Is it safe to touch ${path} file here?`);
});
可读的管道文档说:
默认情况下,当源 Readable 流发出“end”时,在目标 Writable 流上调用 stream.end()
那么,当从可读流中发出“结束”事件时,我是否可以假设文件已完全写入并关闭?因此,第一个片段就足够了。谢谢你的帮助!
解决方案
推荐阅读
- javascript - 如何修改 bootstrap-vue 中的下拉项以打开模式?
- python - 如何将多个输入(四个)合并到神经网络中进行二值图像分类?
- html - 在引导列中的图像中环绕文本
- vue.js - 在另一个 Nuxt.js 应用程序中包含构建的 Nuxt 应用程序(dist 文件夹文件)应用程序
- reason-react - 如何返回外部方法作为选项?
- assembly - 汇编寄存器与 CPU 寄存器
- python - Python 无法从 xml 文档中获取所有信息
- excel - VBA 地址匹配破坏了引用单元格的数据验证
- c# - 如何阻止 BeginForm() 引用 ASP.NET Core MVC 应用程序中的区域?
- python - 如何重新启动我的 python 游戏,或者只是重置玩家所在的位置?