gpt4 book ai didi

angular - BehaviorSubject 订阅者多次获得相同的 next() 元素

转载 作者:行者123 更新时间:2023-12-04 00:04:26 62 4
gpt4 key购买 nike

我正在使用 的 shareDataService行为主题 像下面。我的问题是每次我调用服务的下一个() 任何其他组件中的监听器订阅被多次调用的方法,看起来它多次收到相同的消息。这是预期的行为吗?如何预防?

该服务是一个单例。
我不叫更改留言 多次

@Injectable()
export class ShareDataService {

messageSource = new BehaviorSubject(someData);
currentMessage: Observable = this.messageSource.asObservable();
changeMessage(message) {
this.messageSource.next(message);
}

}

组件中的订阅
ngDoCheck() {
this.shareDataService.currentMessage
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe((message) => {
//Do stuff
}
});
}

最佳答案

每次都会添加一个新订阅 ngDoCheck() 叫做。尝试使用 first() 只获得一次值(value),然后自动退订。

ngDoCheck() {
this.shareDataService.currentMessage
.pipe(first())
.subscribe((message) => {
// Do stuff
}
});
}

下次 ngDoCheck被触发,它会添加另一个一次性订阅。

如果您订阅的唯一目的是获取更改检测的当前值,您还可以向 ShareDataService 添加一个简单的 get() 函数以仅返回其当前值。

get() {
return this.messageSource.getValue();
}

关于angular - BehaviorSubject 订阅者多次获得相同的 next() 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51478183/

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