Rao*_*old 5 subscription unsubscribe observable rxjs angular
设想一下其中Observable包含实时变化数据的情况,下面的示例...
interface User {
name: string;
projectId: string;
dataThatChangesALotInRealTime: Object;
}
userData: Observable<User>
Run Code Online (Sandbox Code Playgroud)
此userData可观察值用于组件中以显示一些实时更改的数据。例如
<p>
{{ (userData | async)?.dataThatChangesALotInRealTime }}
</p>
Run Code Online (Sandbox Code Playgroud)
现在我想根据userData可观察到的当前数据向数据库中插入一些数据。这是功能
addToDatabase() {
let sub = this.userData.subscribe(data => {
this.exampleDatabase.doc(`test/${data.dataThatChangesALotInRealTime.id}`)
.add({ test: 'hello'})
sub.unsubscribe() // <- This
})
}
Run Code Online (Sandbox Code Playgroud)
题
这是取消订阅内部预订以避免多次插入数据库的正确解决方案吗?有其他/更好的方法可以做到这一点吗?
这只是一个简单的示例,如果您有任何问题或我的解释不力,请在评论中让我知道,我将更新我的问题。谢谢
您可以使用first运算符:
this.userData.pipe(first()).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
发出第一个值后,此操作将自动完成(并因此取消订阅)。
请注意,您应确保它在完成之前至少发出一次,否则将引发错误。如果不能确保这一点,可以take(1)改用:
this.userData.pipe(take(1)).subscribe(...);
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上并没有userData直接修改可观察对象,因此无论如何它的其他订阅都将继续发出。这是因为rxjs中的运算符不会修改可观察变量,而是返回一个新的可观察变量。
| 归档时间: |
|
| 查看次数: |
4262 次 |
| 最近记录: |