angular - RXJS BehaviorSubject.next() 不调用订阅者
问题描述
我有以下服务
@Injectable({
providedIn: 'root'
})
export class MyService {
private mySubject = new BehaviorSubject({});
public currentData = this.mySubject.asObservable();
updateData(data: any) {
this.mySubject.next(data);
}
}
我有一个订阅Observable
了以下内容的组件:
export class MyComponent implements OnInit {
constructor(private myService: MyService) { }
ngOnInit() {
this.myService.currentData.subscribe(data => /* some logic here */);
}
}
我有另一个调用updateData
服务方法的组件。
export class AnotherComponent {
constructor(private myService: MyService) { }
onClick(data) {
this.myService.updateData(data);
}
}
我期望.subscribe
定义的 inMyComponent
会在this.myService.updateData
调用 within时被调用AnotherComponent.onClick
,但事实并非如此。我可以确认 Observable 确实有一个订阅者,正如你所期望的那样。
解决方案
中定义的闭包this.myService.currentData.subscribe(data => /* some logic here */);
抛出了一个未捕获的异常,这将阻止在后续.next()
调用中再次调用此闭包。修复异常的来源(或使用 a try...catch
)解决了这个问题。
推荐阅读
- android - openid app auth 自定义社交登录给出异常 ANDROID
- python - 如何在python中计算每15行的百分位数
- arrays - 局部和全局数组和分段错误
- sql - 如何从一长串数据中提取信息
- javascript - 由于 Chatbot 切换硒导致的 ElementNotInteractable 异常
- azure - 无法保存远程桌面设置 (Azure)
- javascript - django ajax:用户匹配查询不存在
- c# - Selenium 和 eCharts - 努力解析文本显示为弹出窗口
- flutter - 在小部件上方找不到正确的提供程序
- python - Python将具有多个工作表的xls转换为没有换行符或字节的csv