2017-11-10 10 views
0

RxJSが新しくなりました。私はRxJsを使用しています。5.5.2reduceを使用すると、呼び出しが完了しない件名

簡単にするために、私は被験者に対して次回に呼び出すたびに値を減らしたいと思います。私はsub.complete()何も起こりません呼び出すことはありません場合は今

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.next()で値を送信できなくなります。

答えて

1

marble diagramreduceの方法をご覧ください。

enter image description here

ストリームが終了したときにのみ、あなたがcompleteを呼び出すまであなたは何を持っていない理由です、放出ます。

あなたが「減らす」とあなたはかなりscanを使用する必要があります時間をかけて値を取得したい場合: enter 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 
関連する問題