我在角度5中有一些带有计时器的代码
this.timer$ =
Observable.merge(
this.timerStart$.mergeMap( () => Observable.interval(1000).takeUntil(this.timerStop$) ).map(() => 1),
this.timerReset$.map(() => 0)
).scan((acc, n) => n === 0 ? 0 : acc + n )
订阅timer $属性,我得到的是由其他树控制的流:timerStart $,this.timerStop $,timerReset $,就像这样
this.timerStart$.next(1);
转到Angular 6和Rxjs 6后,此代码无效。 我以前没有学习过深入的rxjs,因此翻译可能需要几个小时。 如果某些rxjs专家可以帮助将这种棘手的构造转换为rxjs 6,将不胜感激。
答案 0 :(得分:4)
您更新的代码应如下:
// note merge and interval are imported from rxjs not from rxjs/operators
import {merge, interval} from 'rxjs';
import {mergeMap, map, takeUntil, scan} from 'rxjs/operators';
this.timer$ =
merge(
this.timerStart$.pipe(mergeMap( () => interval(1000).pipe(takeUntil(this.timerStop$)) ), map(() => 1)),
this.timerReset$.pipe(map(() => 0))
).pipe(scan((acc, n) => n === 0 ? 0 : acc + n ))
// Without subscription, nothing will happen
this.timer$.subscribe(x =>{});