如何使用 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)
);
这是我试图用 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)
);