我是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()
发送值;
答案 0 :(得分:1)
查看reduce
方法的marble diagram。
它只会在流结束时发出,这就是为什么在你致电complete
之前你没有任何东西。
如果你想“减少”并随着时间的推移获得价值,你应该使用scan:
所以你的代码应该是:
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