带有可观测算子的if-else控制结构RxJS建模

带有可观测算子的if-else控制结构RxJS建模,rxjs,Rxjs,是否可以通过RxJS操作符对if/else控制结构进行建模。据我所知,我们可以使用Observable.filter()来模拟IF分支,但我不确定我们是否通过任何Observable操作符来模拟ELSE分支。有几个操作符可以用来模拟: 从最有可能的你所要求的 在v6中编辑重命名为 (仅适用于RxJS 4) 你读过还是读过?@xgrommx,其实我是用你的Rx书来学习RxJS的。我完全错过了来自if操作符的elseSource参数。非常感谢Rx.Observable.if()工作得非常出色。感

是否可以通过RxJS操作符对if/else控制结构进行建模。据我所知,我们可以使用Observable.filter()来模拟IF分支,但我不确定我们是否通过任何Observable操作符来模拟ELSE分支。

有几个操作符可以用来模拟:

从最有可能的你所要求的

在v6中编辑重命名为

(仅适用于RxJS 4)


你读过还是读过?@xgrommx,其实我是用你的Rx书来学习RxJS的。我完全错过了来自
if
操作符的
elseSource
参数。非常感谢
Rx.Observable.if()
工作得非常出色。感谢您提供这一全面的操作员列表。我想根据用例的不同,我可以使用其中一个操作符来模拟
if/else
。对于我的特定示例,
Rx.Observable.if()
做到了这一点。在rxjs文档中有更多的操作符/详细信息:感谢所有的详细信息
Rx.Observable.if()
elseSource
一起完成了这项任务。尽管文档中找不到它,但Observable.if实际上在RxJs 5中可用。@paulpdaniels如果我们使用hot Observable,groupby是如何工作的?
//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();

// Using RxJS >= 6
const [evens, odds] = partition(observableSource, x => x % 2 == 0);

//Only even numbers
evens.subscribe();

//Only odd numbers
odds.subscribe();
//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);
  });
//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]))

// Using RxJS >= 6
iif(() => value > 5, of(5), from([1, 2, 3]))
//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!"))