rxjs takeUntil не выполняет финализацию - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть следующий обратный отсчет:

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 был выполнен.Есть ли возможность этого достичь?Я хочу, чтобы finalize выполнялся только тогда, когда обратный отсчет достиг 0 и ранее не прерывался takeUntil

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать 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)
      )
}

См. Этот пример

...