Внутри ngOnint () сервисный метод вызывается более одного раза - PullRequest
1 голос
/ 07 января 2020
  ngOnInit() {
    this.store.pipe(select(empReducer.getErrorStatus)).subscribe(err => this.Error = err);
    this.store.pipe(select(empReducer.getEmpInfo)).subscribe(res=> console.log('test'));
}

Консоль вызывается более одного раза, почему?

Ответы [ 2 ]

3 голосов
/ 07 января 2020

Я вижу только две возможности:

  1. empReducer.getEmpInfo испускает более одного раза.

  2. Как и в приведенном вами коде, есть подписка, но нет отмены подписки (либо с unsubscribe(), либо с шаблоном takeUntil) на уничтожение. Если компонент создается, уничтожается, создается снова (скажем, пользователь переходит в другое представление и обратно), у вас будет две или более активных подписки.

1 голос
/ 07 января 2020

Как ранее советовалось, проверьте ответ, чтобы увидеть, на что вы подписаны Что касается подписок, вы можете использовать этот шаблон, чтобы гарантировать, что все подписки будут отменены при уничтожении компонента. Надеюсь это поможет.

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();
}
...