繁体   English   中英

取消订阅 Rxjs finalize 运算符

[英]unsubscribe to the Rxjs finalize operator

问:我在这里有一个问题。 当源完成或完成 Observable 时,已调用finalize运算符。 这很清楚。 但是我们如何预测它不会因为 Source observable 的变化而再次发出值呢? 或者finalize将在完成第一次发射后终止原始 Observable。 即不再像take(1)那样从源发出。

我使用AngularFireStorage 模块下载 Url。 我需要在它返回 URL 后完成 observable。 我怎样才能做到这一点? 即没有取消订阅这里的订阅。

这会奏效还是更好的方法? 获取下载 URL 后如何自动取消订阅?

     afUploadTask.snapshotChanges().pipe(take(1), finalize(() => this.downloadURL 
= afStorageReference.getDownloadURL())).subscribe();

这是文档中的原始示例:

task.snapshotChanges().pipe(
        finalize(() => this.downloadURL = fileRef.getDownloadURL() )
     )
    .subscribe()

您的目标是等待上传任务完成,然后设置 url。 您可以完全按照示例中的方式进行操作,或者像这样:

afUploadTask.snapshotChanges().subscribe(
  null,
  null,
  () => this.downloadURL = afStorageReference.getDownloadURL()
);

这也是等价的:

afUploadTask.snapshotChanges().pipe(last()).subscribe(
  () => this.downloadURL = afStorageReference.getDownloadURL()
);

添加take运算符将导致在 url 可用之前提前完成。 您无需担心取消订阅,因为上传完成后可观察对象将完成。 完成的 observable 不会阻止垃圾收集或导致 memory 泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM