1

这是我试图用 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

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

4

1 回答 1

1

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

mapTo(-1) // always emits -1

-- 对 --

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

我认为解决方案很简单,只需删除“值”即可:

ops.map(lambda value: -1)

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

const countDown$ = interval(1000).pipe(
  scan(accumulator => accumulator - 1, 10)
  takeWhile(value => value >= 0)
);
于 2021-09-10T01:43:46.877 回答