内部ngOnint()服务方法多次调用

问题描述 投票:0回答:2
  ngOnInit() {
    this.store.pipe(select(empReducer.getErrorStatus)).subscribe(err => this.Error = err);
    this.store.pipe(select(empReducer.getEmpInfo)).subscribe(res=> console.log('test'));
}

控制台为何被多次调用?

angular store lifecycle function-call ngoninit
2个回答
1
投票

我只看到两种可能性:

  1. empReducer.getEmpInfo发射不止一次。

  2. 在您提供的代码中,有一个订阅,但是销毁上没有取消订阅(使用unsubscribe()takeUntil模式)。如果组件被创建,销毁,再次创建(例如,用户转到另一个视图并再次返回),则您将拥有两个或多个活动订阅。


0
投票

如先前所建议,请检查答复以查看您要订阅的内容。关于订阅,您可以使用此模式来确保在销毁组件时取消所有订阅。希望这可以帮助。

private _subscriptions: Subscription = new Subscription();

public ngOnInit():void {

  this._subscriptions.add(
    this.store.pipe(select(empReducer.getErrorStatus)).subscribe(err => this.Error = err)
    )
  );

  this._subscriptions.add(
    this.store.pipe(select(empReducer.getEmpInfo)).subscribe(res => console.log('test')
    )
  );
}

public ngOnDestroy(): void {
    this._subscriptions.unsubscribe();
}
© www.soinside.com 2019 - 2024. All rights reserved.