angular - 从 finalize() 运算符发出另一个 Observable 是一种好习惯吗?
问题描述
用自己的内部订阅执行另一个 observable 真的很好finalize()
吗?我知道,把它放在里面subscribe()
不是一个好习惯,这会导致内存泄漏等。我目前正在使用 Firebase Storage API 并尝试将图像上传到数据库,当你不能获取正确的上传状态。因此,我试图了解,当我可以从数据库中获取图像的 URL 时,作为响应,传输的字节数等于总字节数。但 Firebase 对此作出回应,我的图像在服务器上尚不存在。
所以我必须在运算符中获取图像 URL finalize()
。这真的是个好主意吗?
此外,可以使用 using 来做到这一点debounceTime()
,但我想让代码更加清晰和同步。
另外,搜索了不同的解决方案,发现了一些文章,作者做了同样的事情
this.storage.upload(filePath, this.selectedImage).snapshotChanges()
.pipe(
rxFilter(res => res.bytesTransferred === res.totalBytes),
switchMap(res => this.storage.ref(filePath).getDownloadURL())
)
.subscribe(url => {
console.log(url);
});
解决方案
这绝对是一种不好的做法,不建议这样做。有很多潜在的缺点和竞争条件通常由 RxJS 处理,你需要自己处理。根据您的问题,有不同的方法可以做到这一点。我不明白整个问题,但听起来你想/应该使用switchMap
或concat
推荐阅读
- python - 在python中查找对应的列
- reactjs - 如何在 CRA 构建期间将 scss 编译包含到 css
- angular - 如何在 Angular 中的 CSV 中创建多行标题?
- jquery - NUXT中按钮的回调函数未触发
- php - 使用 getID3() 编写 .mp3 标签 - PHP 7.2.31
- android - 如何存储用户输入会话并再次检索它?
- java - 使用java从xml转换后如何从json中删除根节点
- ios - AppStore 与 TestFlight 的按需资源下载速度
- python - 如何在 macOS 上更快地截取屏幕截图?
- sql - 我的 sql 查询有一个问题..就像我需要多行数据到一行