RxJS - BehaviorSubject, onComplete не вызывается - PullRequest
1 голос
/ 15 мая 2019

Я создаю приложение Angular 7 и использую BehaviorSubject для поддержания состояния аутентификации пользователя, как это рекомендуется для каждого источника в Интернете.

Поскольку BehaviorSubject является Observable, почему я не могу запустить метод onComplete ()?

Вот код (который мне кажется довольно классическим):

this.authService.authenticationState.subscribe(state => {
      this.isLoggedIn = state;
    },
    err => console.log(err),
    () => console.log('complete')
    );

authService

authenticationState = new BehaviorSubject(false);

'complete' не зарегистрировано. Я что-то не так делаю?

РЕШЕНИЕ

this.authService.authenticationState.subscribe(state => {
      this.isLoggedIn = state;
      this.authService.authenticationState.complete();
    },
    err => console.log(err),
    () => console.log('complete')
    );

затем вызывается метод complete ()

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

complete вызывается только тогда, когда наблюдаемый объект выполняет излучение предметов. IOW это последнее событие из ошибочной наблюдаемой.

Если вас интересует только один предмет из этой наблюдаемой, вы можете:

authenticationState.first().subscribe();

Таким образом, complete будет вызываться после единичного элемента.

1 голос
/ 15 мая 2019

Я думаю, что вы можете инициировать завершение таким образом, когда будете готовы к тому, что будет вызван полный раздел подписки.

authenticationState.complete();
...