使用 reduce Subject 而不调用 complete
Use reduce Subject without calling complete
我是 RxJS 的新手。我正在使用 RxJs 5.5.2
为简单起见,我想在每次调用 next 主题时 return 减少值。这是一个示例代码:
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()
发送值;
看看 reduce
方法的 marble diagram。
它只会在流结束时发出,这就是为什么在调用 complete
之前你没有任何东西的原因。
如果您想 "reduce" 并随时间获取值,您应该使用 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
我是 RxJS 的新手。我正在使用 RxJs 5.5.2
为简单起见,我想在每次调用 next 主题时 return 减少值。这是一个示例代码:
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()
发送值;
看看 reduce
方法的 marble diagram。
它只会在流结束时发出,这就是为什么在调用 complete
之前你没有任何东西的原因。
如果您想 "reduce" 并随时间获取值,您应该使用 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