gpt4 book ai didi

angular - RxJS - 只订阅一次但不完成 Observable

转载 作者:太空狗 更新时间:2023-10-29 17:35:18 24 4
gpt4 key购买 nike

想象一下当你有一些包含实时变化的数据的 Observable 的情况,下面的例子......

interface User {
name: string;
projectId: string;
dataThatChangesALotInRealTime: Object;
}

userData: Observable<User>

这个 userData observable 在组件中使用来显示一些实时变化的数据。例如

<p>
{{ (userData | async)?.dataThatChangesALotInRealTime }}
</p>

现在我想根据 userData observable 中的当前数据向数据库中插入一些数据。这是函数

addToDatabase() {
let sub = this.userData.subscribe(data => {
this.exampleDatabase.doc(`test/${data.dataThatChangesALotInRealTime.id}`)
.add({ test: 'hello'})
sub.unsubscribe() // <- This
})
}

问题

这是取消订阅内部订阅以避免多次插入数据库的正确解决方案吗?有没有不同/更好的方法来做到这一点?

这只是一个简单的示例,如果您有任何问题或我的解释不充分,请在评论中告诉我,我会更新我的问题。谢谢

最佳答案

您可以使用first 运算符:

this.userData.pipe(first()).subscribe(...);

这将在发出第一个值后自动完成(并因此取消订阅)。

请注意,您应该确保它在完成之前至少发出一次,否则将抛出错误。如果不能确保这一点,可以使用 take(1) 代替:

this.userData.pipe(take(1)).subscribe(...);

请注意,这实际上并没有直接修改 userData observable,因此不管怎样,对它的其他订阅将继续发出。这是因为 rxjs 中的运算符不会修改 observable,而是返回一个新的 observable。

关于angular - RxJS - 只订阅一次但不完成 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com