[英]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.