首页 > 解决方案 > 从 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);
        });

标签: angulartypescriptrxjsfirebase-storage

解决方案


这绝对是一种不好的做法,不建议这样做。有很多潜在的缺点和竞争条件通常由 RxJS 处理,你需要自己处理。根据您的问题,有不同的方法可以做到这一点。我不明白整个问题,但听起来你想/应该使用switchMapconcat


推荐阅读