首页 > 解决方案 > 将 RXJS do() 迁移到 tap()

问题描述

我有一个使用 RXJS 6 进行身份验证的 Angular 应用程序。我已经安装了 rxjs-compat,所以下面的代码仍然有效。但我想学习如何重构代码。

 auth$ = this.af.authState
  .do(next => {
     if (!next) {
      this.store.set('user', null);
      return;
    }
    const user: User = {
      email: next.email,
      uid: next.uid,
      authenticated: true
    };
    this.store.set('user', user);
});

我能够使用文档更新我的应用程序,将每个运算符包装在一个 pipe() 中,这有点整洁,但我注意到我没有在我的商店中更新 Authstate。因此,经过一番研究,我在这里找到了 ggradnig的参考资料。

我尝试在管道之后添加订阅,并且能够通过控制台注销,但我无法弄清楚如何获得身份验证:true 来触发。这是我忘记发布的不返回身份验证的 tap() 版本。

 auth$ = this.af.authState
.pipe(
tap(next => {
    if (!next) {
      this.store.set('user', null);
      return;
    }
    const user: User = {
      email: next.email,
      uid: next.uid,
      authenticated: true
    };
    this.store.set('user', user);

})

)

标签: angularrxjs6

解决方案


推荐阅读