将rxjs从5迁移到6

时间:2018-07-08 11:29:50

标签: angular rxjs

我在角度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,将不胜感激。

1 个答案:

答案 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 =>{});