2016-12-05 4 views
1

RxJSにはfilter()のように動作する演算子がありますが、Observable?を返すことを許可する述語を受け入れますか?したがって、述語によって返されたObservableがイベントを発行するとき、filter()は、元のソースからのイベントを破棄すべきかどうかを決定します。Return from RxJS filter()述語

答えて

1

私が正しくあなたを理解していれば、私は次のようにそれを行うだろう:私は別の観察可能な、そのソースが発した場合にのみ発するwithLatestFromオペレータとの各値を包ん

const Observable = Rx.Observable; 
const Subject = Rx.Subject; 

let subject = new Subject(); 

source = Observable.from([1,2,3,4]) 
    .flatMap(val => subject 
    .withLatestFrom(Observable.of(val), (_, val) => val) 
    .filter(val => val % 2 == 0) 
); 

source.subscribe(val => console.log(val)); 

subject.next(null); 
setTimeout(() => { 
    subject.next(null); 
}, 1000); 

。私の場合、ソースはsubjectなので、私はそれを完全に制御できます。それで、あなたが望むものをフィルターにかけることができるfilter()があります。

私はsetTimeoutコールバック内subject.next(null);と呼ばれるので、私は別の2任意の容易なソリューションがあります場合、これが唯一の2つの値を出力します

...不思議と1の後に、けれども:

2 
4 
2 
4 

はライブデモを参照してください。 https://jsbin.com/gasumiz/10/edit?js,console

+0

ありがとうございました!デモが期待どおりに動作することを確認することができますが、実際にはこのシナリオでは少し複雑すぎます。数時間以内にそれを私が念頭に置いている実際の使用事例に適用しようとします。それからあなたに結果を知らせるために私はあなたに戻ってきます。 –