首页 > 解决方案 > 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 确实有一个订阅者,正如你所期望的那样。

标签: angulartypescriptrxjs

解决方案


中定义的闭包this.myService.currentData.subscribe(data => /* some logic here */);抛出了一个未捕获的异常,这将阻止在后续.next()调用中再次调用此闭包。修复异常的来源(或使用 a try...catch)解决了这个问题。


推荐阅读