背景:

我正在构建angular 2应用程序(带有Firebase API).我正在使用AngularFire模块.我想知道如何将canActivate方法与AngularFire auth Observable相结合,我找到了this post.答案是让canActivate方法返回Observable<boolean>:

canActivate(): Observable<boolean> {
  return this.auth
    .take(1)
    .map((authState: FirebaseAuthState) => !!authState)
    .do(authenticated => {
      if (!authenticated) this.router.navigate(['/login']);
    });
}

这是我第一次看到可观测的do算符,但我不明白它到底是做什么的?官方doctor 没有帮我,我也没有找到像样的例子.

问题:

有没有人能给我举几个.do()种用法的例子?和.subscribe()有什么不同?

推荐答案

Update

现在是pipe( tap(...), ),而不是do()

Original

.do()是 for each 事件执行代码.与.map()不同的是,.do()的返回值被忽略,并且不会改变订阅者接收到的值.

Angular相关问答推荐

Angular - MSAL用户缺少角色

导入浏览器模块时出错已导入commonModule的insted,animationBrower也显示错误,当p打开时

Primeng 12Angular 12自定义库:错误符号字段集声明于...在编译保存后未从Primeng/fieldset中导出

未在ng bootstrap 模式中设置表单输入

在Angular 为17的独立零部件中使用@NGX-平移

Angular 17水化-POST请求同时触发客户端/服务器端,而GET请求仅触发服务器端?

如何将表单作为Angular 分量输入传递?

如何在 Angular 库中将依赖项声明为可选?

http 调用的 RxJs 数组

手动关闭 SSE 连接:Angular

ng14中具有强类型表单的FormBuilder

在更改检测之前调用创建的间谍

运行 npm 测试(Angular 2 单元测试)后无法读取未定义的属性 subscribe

由于时区,Angular 4 日期管道显示错误的日期 - 如何解决这个问题?

Angular2 中的providers提供者是什么意思?

将 Angular 5 升级到 6 时,我得到不兼容的对等依赖(使用 ng update @angular/core)

为什么 *ngIf 不适用于 ng-template?

如何在 angular2 中的 div 的 contenteditable 上使用 [(ngModel)]?

ng add 与 npm install 在 Angular 6 中的区别

'Observable' 类型上不存在属性 'filter'