angular - rxjs takeUntil 不执行finalize

标签 angular typescript rxjs pipe finalize

我有以下倒计时:

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

最佳答案

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

关于angular - rxjs takeUntil 不执行finalize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54922867/

相关文章:

rxjs - Interval() 具有基于值的延迟

javascript - 如何从 Angular 构建中排除文件类型?

javascript - 将 Angular 1 转换为 Angular 2 ngInit 函数

Angular 2 如何使单例服务可用于延迟加载的模块

Visual Studio 在线构建中的 TypeScript

javascript - 检查8秒内是否没有返回响应

javascript - 根据条件禁用(点击)功能

Angular 2 无法读取 null 错误的属性 'glob'

javascript - 如何导入 Typescript 所需的 chrono 库?

javascript - rxjs 在处理数据之前检查流是否为空