RXJS BehaviorSubject.next()不呼叫订阅者

时间:2018-09-25 16:11:16

标签: angular typescript rxjs

我有以下服务

@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中定义的MyComponent将在this.myService.updateData内的AnotherComponent.onClick调用中被调用,但不会。我可以确认Observable确实有一个订阅者,正如您期望的那样,给定了代码。

1 个答案:

答案 0 :(得分:0)

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