【问题标题】:rxjs takeUntil do not execute finalizerxjs takeUntil 不执行 finalize
【发布时间】:2019-07-22 04:50:30
【问题描述】:

我有以下倒计时:

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 中断时执行finalize

【问题讨论】:

  • 尝试使用扁平箭头:takeUntil(()=>this.userClick) -我不知道是否有效,这只是一个建议

标签: angular typescript rxjs pipe finalize


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢,一件事:解决方案计数,但我希望它倒计时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2013-12-09
  • 2010-09-06
  • 2020-10-07
相关资源
最近更新 更多