欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Observable .do()运算符(rxjs)的用例 有大用

36

 内容:

我正在构建一个angular 2应用程序(带有Firebase API)。我正在使用AngularFire模块。我想知道如何将canActivate方法与AngularFire auth Observable 混合使用,并且发现了这篇文章答案是使canActivate方法返回Observable<boolean>

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

这是我第一次看到Observable do运算符,但我不明白它的真正作用是什么?官方文档并没有帮助我,也没有找到像样的例子。

题:

有人可以带一些.do()用法示例吗?和不同.subscribe()吗?

1个回答    正确答案

53

更新资料

现在pipe( tap(...), )代替do()

原版的

.do()是为每个事件执行代码。与的不同之处.map()在于,的返回值将.do()被忽略,并且不会更改订户收到的值。

  • 2
    好的,我知道了,它是在不修改流的情况下进行一些处理的。但是我不明白为什么没有这项工作subscribe吗?是否do做同样的事情?能给我一些例子吗?THX的回复反正 -  soywod 10:12 12月4日'16
  • 8
    @Soywod有一个订阅:只是不在您的代码中。路由器订阅您的卫士返回的可观察对象,以了解它是否可以激活。 –  JB Nizet '16 Dec 4'在10:21 
  • 因此,我是否正确地说do()调用中的副作用将在路由器订户函数之后执行? – user2153465 17年  8月19日在18:48
  • 1个
    当@ router.navigate返回的observable this.auth发出第一个值时,将调用@ user2153465  -  君特Zöchbauer 8月19日'17 20:30
  • 1个
    @ Franki1986当然可以,但是您需要subscribe()否则可执行文件将不会执行任何操作,也不会调用do(...) -  君特Zöchbauer 5月29日9:16时


来自  https://stackoverflow.com/questions/40957381/use-case-of-observable-do-operator-rxjs

普通分类: