2017-11-10 54 views
0

我是RxJS的新手。我正在使用RxJs 5.5.2使用reduce主題沒有完成調用

爲了保持簡單,我希望每次在主題上調用next時都返回縮小的值。下面是一個示例代碼:

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

看看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