Observable .do() 运算符的用例 (rxjs)
Use case of Observable .do() operator (rxjs)
上下文:
我正在构建一个 angular 2 应用程序(使用 Firebase API)。我正在使用 AngularFire 模块。我想知道如何将 canActivate
方法与 AngularFire auth Observable 混合使用,我发现了 this post。答案是使 canActivate
方法 returns 成为 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()
的区别 ?
更新
现在是 pipe( tap(...), )
而不是 do()
原创
.do()
是对每个事件执行代码。与 .map()
的区别在于,.do()
的 return 值被忽略,并且不会更改订阅者收到的值。
现在是 pipe( tap(...), )
而不是 do()
const source = of(1, 2, 3, 4);
source.pipe(
tap(val => console.log('I am tap: ',val)),
filter(val => val > 2),
map(val => val + 1)).subscribe((val) => {
console.log('I am subscriber value after filtering: ', val);
});
输出:
I am tap: 1
I am tap: 2
I am tap: 3
I am subscriber value after filtering: 4
I am tap: 4
I am subscriber value after filtering: 5
*Tap算子不修改任何东西,可以说只是为了看流
上下文:
我正在构建一个 angular 2 应用程序(使用 Firebase API)。我正在使用 AngularFire 模块。我想知道如何将 canActivate
方法与 AngularFire auth Observable 混合使用,我发现了 this post。答案是使 canActivate
方法 returns 成为 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()
的区别 ?
更新
现在是 pipe( tap(...), )
而不是 do()
原创
.do()
是对每个事件执行代码。与 .map()
的区别在于,.do()
的 return 值被忽略,并且不会更改订阅者收到的值。
现在是 pipe( tap(...), )
而不是 do()
const source = of(1, 2, 3, 4);
source.pipe(
tap(val => console.log('I am tap: ',val)),
filter(val => val > 2),
map(val => val + 1)).subscribe((val) => {
console.log('I am subscriber value after filtering: ', val);
});
输出:
I am tap: 1
I am tap: 2
I am tap: 3
I am subscriber value after filtering: 4
I am tap: 4
I am subscriber value after filtering: 5
*Tap算子不修改任何东西,可以说只是为了看流