代码之家  ›  专栏  ›  技术社区  ›  farahm

rxjs takeUntil不执行finalize

  •  1
  • farahm  · 技术社区  · 6 年前

    userClick=new Subject()
    
    resetCountdown(){this.userClick.next()}
    
    setCountDown() {
        let counter = 5;
        let tick = 1000;
        this.countDown = timer(0, tick)
        .pipe(
          take(counter),
          map(() => --counter),
          takeUntil(this.userClick),
          finalize(() => {
            if (this.currentQuestionNumber < this.questionsToAsk)
              this.showNextQuestion();
            else {
              this.endQuiz();
            }
    
          })
        );
    }
    

    什么时候? takeUntil(this.userClick) 发生,我不想 finalize 待执行。有没有可能做到这一点?我只想 定稿 在倒计时结束时执行 0 takeUntil

    0 回复  |  直到 6 年前
        1
  •  1
  •   kos    6 年前

    你可以用 tap 检查值是否已达到目标并执行副作用。
    像这样的

    function setCountDown() {
        let counter = 5;
        let tick = 1000;
        this.countDown = timer(0, tick)
          .pipe(
            take(counter + 1),
            map(value => counter - value),
            tap(value => {
              if (value === 0) {
                console.log('OUT OF TIME');
              }
            }),
            takeUntil(userClick)
          )
    }
    

    看到这个了吗 example

    推荐文章