【发布时间】:2018-07-23 11:54:03
【问题描述】:
我正在使用使用 BehaviorSubject 的 shareDataService,如下所示。我的问题是,每次我调用服务的 next() 方法时,任何其他组件中的侦听器订阅都会被调用多次,看起来它多次收到相同的消息。这是预期的行为吗?如何预防?
服务是单例的。 我不会多次调用 changeMessage
@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
}
});
}
【问题讨论】:
-
你能记录下所有订阅成功回调的顺序并告诉我们吗? BehaviorSubject 应该发出最后一个(以前发出的数据和当前发出的数据)但只是为了确保请显示将包含所有成功回调发生的日志
-
next(...)将值发送给所有观察者(订阅者)。您可能会在同一个组件中创建多个订阅。 -
你能把代码贴在你实际订阅的地方吗?
-
@DavidR - 刚刚添加
-
@martin - 你是什么意思?我只在多个组件中订阅一次
标签: angular rxjs subscribe behaviorsubject