angular - RxJS -BehaviorSubject,onComplete 未调用

标签 angular typescript rxjs behaviorsubject

我正在构建一个 Angular 7 应用程序,并使用BehaviorSubject 来保持用户身份验证状态,正如互联网上每个来源所建议的那样。

既然BehaviorSubject是一个Observable,为什么我不能触发onComplete()方法?

这是代码(对我来说似乎非常经典):

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

授权服务

authenticationState = new BehaviorSubject(false);

未记录“完整”。我是不是做错了什么?

解决方案

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

然后,complete() 方法被触发

最佳答案

complete 仅当 Observable 完成发射项时才会被调用。 IOW,这是来自无错误 Observable 的最后一个事件。

如果您只对此 Observable 中的单个项目感兴趣,您可以:

authenticationState.first().subscribe();

这样,complete 将在单个发出的项目之后被调用。

关于angular - RxJS -BehaviorSubject,onComplete 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56146574/

相关文章:

rxjs - 使用 combineLatest 将 n+1 个流添加到 RXJS 流

javascript - 注销过程中未发送请求

Angular 6 : Calling service observer. 接下来来自 Http 拦截器导致无限请求循环

angular - Formbuilder 和 Angular 材

angular - PhantomJS 不适用于 Angular2 项目中的 Karma

javascript - 字符串对象到数字 typescript

javascript - 实例化 Injectable 类时未调用 ngOnInit

javascript - 在每个新连接上使用 rxjs webSocket 发送消息

angular - 属性然后在类型 void 上不存在, typescript 错误

javascript - 我该如何重构这个 RXJS/Angular 代码?