web-dev-qa-db-fra.com

Modélisation RxJS si autre contrôle les structures avec les opérateurs Observables

Est-il possible de modéliser les structures de contrôle if/else via les opérateurs RxJS? D'après ce que j'ai compris, nous pourrions utiliser Observable.filter () pour simuler une branche IF, mais je ne suis pas sûr de simuler une branche ELSE via l'un des opérateurs Observable.

27
Artur Ciocanu

Il y a quelques opérateurs que vous pouvez utiliser pour émuler ceci:

Afin de très probablement ce que vous demandez fo

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);
  });

si

//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]))

cas (Uniquement disponible dans RxJS 4)

//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!"))
45
paulpdaniels