为什么 console.log 打印多次
why the console.log prints multiple times
嗨,我是 Rxjs 及其运算符的新手。
我很难理解下面的代码
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
const id = route.paramMap.get('id');
console.log('Entered in Can-Activate');
return this.store.select(policy)
.pipe(
tap(policy => {
console.log('-------------------' + JSON.stringify(policy));
if (policy.model.id !== id && policy.meta.loading !== 'progress') {
console.log('--------------dispaching-----');
this.store.dispatch(new Load(id));
}
}),
filter(policy => (
policy.model.id === id &&
(policy.meta.loading === 'done' || policy.meta.loading === 'failed')
)),
map(s => s.meta.loading ==='done'),
take(1)
);
}
控制台的输出是
Entered in Can-Activate
-------------------{"meta":{"loading":"start".........}
-------------------{"meta":{"loading":"progress".........}
-------------------{"meta":{"loading":"done".........}
任何人都可以解释为什么下面的行在函数只调用一次时执行了多次?
console.log('----------------' + JSON.stringify(策略));
是因为ngrx store还是RxJS算子?
this.store.select
是可观察的。
每次状态改变时,它都会发出一个新值,并且 tap
中的逻辑将被执行,直到取消订阅。
如果您满足以下条件,
policy.model.id === id &&
(policy.meta.loading === 'done' || policy.meta.loading === 'failed')
嗨,我是 Rxjs 及其运算符的新手。
我很难理解下面的代码
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
const id = route.paramMap.get('id');
console.log('Entered in Can-Activate');
return this.store.select(policy)
.pipe(
tap(policy => {
console.log('-------------------' + JSON.stringify(policy));
if (policy.model.id !== id && policy.meta.loading !== 'progress') {
console.log('--------------dispaching-----');
this.store.dispatch(new Load(id));
}
}),
filter(policy => (
policy.model.id === id &&
(policy.meta.loading === 'done' || policy.meta.loading === 'failed')
)),
map(s => s.meta.loading ==='done'),
take(1)
);
}
控制台的输出是
Entered in Can-Activate
-------------------{"meta":{"loading":"start".........}
-------------------{"meta":{"loading":"progress".........}
-------------------{"meta":{"loading":"done".........}
任何人都可以解释为什么下面的行在函数只调用一次时执行了多次? console.log('----------------' + JSON.stringify(策略));
是因为ngrx store还是RxJS算子?
this.store.select
是可观察的。
每次状态改变时,它都会发出一个新值,并且 tap
中的逻辑将被执行,直到取消订阅。
如果您满足以下条件,
policy.model.id === id &&
(policy.meta.loading === 'done' || policy.meta.loading === 'failed')