使用reduce Subject而不调用complete

时间:2017-11-10 22:11:53

标签: typescript rxjs rxjs5

我是RxJS的新手。我使用的是RxJs 5.5.2

为了保持简单,我希望每次在主题上调用下一个时返回减少的值。以下是示例代码:

const sub = new Subject<number>();
const obsesvable = sub.pipe(
  reduce((a, b) => {
    return a + b;
  }, 0)
);

obsesvable.subscribe(x => console.log(x));

sub.next(2);
sub.next(3);
// if I don't call this nothing happens
sub.complete();

现在,如果我不打电话sub.complete(),就没有任何事情发生。

如果我致电sub.complete(),我无法再使用sub.next()发送值;

1 个答案:

答案 0 :(得分:1)

查看reduce方法的marble diagram

enter image description here

它只会在流结束时发出,这就是为什么在你致电complete之前你没有任何东西。

如果你想“减少”并随着时间的推移获得价值,你应该使用scanenter image description here

所以你的代码应该是:

const sub = new Subject<number>();
const obsesvable = sub.pipe(
  scan((a, b) => {
    return a + b;
  }, 0)
);

obsesvable.subscribe(x => console.log(x));

sub.next(2);
// output: 2
sub.next(3);
// output: 5