2015-09-15 15 views
18

RxJS operatörleri üzerinden// kontrol yapılarının modellenmesi mümkün mü? Anladığım kadarıyla, bir IF şubesini simüle etmek için Observable.filter() kullanabiliriz, ancak Gözlemci operatörün herhangi biri aracılığıyla bir ELSE dalını simüle ettiğimizden emin değilim.RxJS modellemesi, Gözlemci operatörleri ile yapıları denetliyorsa

+0

Okudun (RxJS 4'te kullanılabilir) http://xgrommx.github.io/rx-book/content/observable/observable_methods/if.html veya http://xgrommx.github.io/rx-book/content/observable/observable_methods/case.html? – xgrommx

+0

@xgrommx, aslında RxJS'nizi öğrenmek için Rx kitabınızı kullanıyorum. 'If' operatöründen 'elseSource' parametresini tamamen özledim. Çok teşekkürler 'Rx.Observable.if()' bir çekicilik gibi çalıştı. –

cevap

32

bu taklit etmeye kullanabilirsiniz birkaç operatörleri vardır: büyük olasılıkla

partition

//Returns an array containing two Observables 
//One whose elements pass the filter, and another whose elements don't 

var items = observableSource.partition((x) => x % 2 == 0); 

var evens = items[0]; 
var odds = items[1]; 

//Only even numbers 
evens.subscribe(); 

//Only odd numbers 
odds.subscribe(); 

groupBy

//Uses a key selector and equality comparer to generate an Observable of GroupedObservables 
observableSource.groupBy((value) => value % 2, (value) => value) 
    .subscribe(groupedObservable => { 
    groupedObservable.subscribe(groupedObservable.key ? oddObserver : evenObserver); 
    }); 
fo soruyorsun ne Amacıyla

if

//Propagates one of the sources based on a particular condition 
//!!Only one Observable will be subscribed to!! 
Rx.Observable.if(() => value > 5, Rx.Observable.just(5), Rx.Observable.from([1,2, 3])) 

case

//Similar to `if` but it takes an object and only propagates based on key matching 
//It takes an optional argument if none of the items match 
//!!Only one Observable will be subscribed to!! 
Rx.Observable.case(() => "blah", 
{ 
    blah : //..Observable, 
    foo : //..Another Observable, 
    bar : //..Yet another 
}, Rx.Observable.throw("Should have matched!")) 
+0

Bu kapsamlı operatör listesini sağladığınız için teşekkür ederiz. Kullanım durumuna bağlı olarak, eğer '/ else' işlevini simüle etmek için bu operatörlerden birini kullanabilirim. Benim özel örneğim için 'Rx.Observable.if() 'hile yaptı. –

+0

rxjs docs'ta daha fazla operatör/ayrıntı: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md –

+0

Tüm ayrıntılar için teşekkürler. Rx.Observable.if() '' '' elseSource'' ile hile yaptı. –