gpt4 book ai didi

javascript - 尽管有 takeUntil,定时器的 Observable 永远不会完成

转载 作者:行者123 更新时间:2023-11-30 21:12:50 25 4
gpt4 key购买 nike

我很难理解为什么我的 Observable 永远不会完成。

我的代码应该像这样工作:

  1. 主题 isTimerEnabled$ 初始化为 false
  2. 它是 switchMap 的函数,当 isTimerEnabled$ 发出 false 时返回 Rx.Observable.never(),否则它映射到一个 Rx.Observable.timer observable
  3. 根据计时器,我采取所有内容 1 秒。
  4. 1 秒后,observable 完成

问题是,当我订阅所有这些时,我的观察者的 complete 方法永远不会被调用。

这是代码,也许更有帮助:

const isTimerEnabled$ = new Rx.Subject(false).switchMap(
isTimerEnabled =>
isTimerEnabled
? Rx.Observable
.timer(0, 100)
.timeInterval()
.pluck('interval')
.takeUntil(Rx.Observable.timer(1000))
: Rx.Observable.never()
)

isTimerEnabled$.subscribe(
console.log,
console.error,
() => console.log('complete !')
)

所以当我这样做的时候:

isTimerEnabled$.next(true)

它向控制台记录了 10 次,然后......好吧(为了......好简单,我简化了我的代码片段)

感谢您的宝贵时间:)

最佳答案

您可以使用 isTimerEnabled$.complete() 这将完成您的 Observable 流。

const isTimerEnabled$ = new Rx.Subject(false).switchMap(
isTimerEnabled =>
isTimerEnabled
? Rx.Observable
.timer(0, 100)
.timeInterval()
.pluck('interval')
.takeUntil(Rx.Observable.timer(1000))
: Rx.Observable.never()
)

isTimerEnabled$.subscribe(
console.log,
console.error,
() => console.log('complete !')
)

setTimeout(() => isTimerEnabled$.next(true), 1000);
setTimeout(() => isTimerEnabled$.complete(), 5000);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

关于javascript - 尽管有 takeUntil,定时器的 Observable 永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45963350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com