如何使用 RxPY 重写这个倒数计时器?

How can I rewrite this countdown timer using RxPY?

这是我试图用 RxPY 重现的 RxJS 代码。

const counter$ = interval(1000);
counter$
  .pipe(
    mapTo(-1),
    scan((accumulator, current) => {
      return accumulator + current;
    }, 10),
    takeWhile(value => value >= 0)
  )
  .subscribe(console.log);
9
8
7
6
5
4
3
2
1
0
-1

这是我通过的等效但不是

counter = rx.interval(1)
composed = counter.pipe(
    ops.map(lambda value: value - 1),
    ops.scan(lambda acc, curr: acc + curr, 10),
    ops.take_while(lambda value: value >= 0),
)
composed.subscribe(lambda value: print(value))
9
9
10
12
15
19

有人可以帮助我了解我在这里缺少什么吗?

我根本不知道 python,但我确实注意到你的 map 和 python 之间的一个区别:

mapTo(-1) // always emits -1

-- 对比--

ops.map(lambda value: value - 1)  # emits interval index - 1

我觉得解决方法很简单,去掉“值”即可:

ops.map(lambda value: -1)

但是,如果您的“当前值”始终是 -1,您可以通过完全不使用 map 并将 -1 放入 scan() 函数来简化。这是它在 rxjs 中的样子:

const countDown$ = interval(1000).pipe(
  scan(accumulator => accumulator - 1, 10)
  takeWhile(value => value >= 0)
);