比方说,我有可观察的可观察名单:将可观测数组Observable <boolean>与Observable <boolean[]>相结合 - 我正在做对吗?
const a = [Observable.of(false), Observable.of(false)];
const aSbj: Observable<Array<Observable<boolean>>> = new BehaviorSubject(a);
我想所有的观测量,结合内部成可观察布尔[]的。这是我的想法(使用打字稿):
const listObs = aSbj
.switchMap((observables: Array<Observable<boolean>>) => {
return Observable.combineLatest(...observables);
});
这似乎是工作,是能够让我我想要的结果,但我的问题是:
- 我是否理解正确switchMap?
- 这是否每次创建一个新的Observable aSbj都会触发?这是否会对性能产生重大影响?
(背景:)
我的最终目标是布尔的整个列表映射到任何()值:
const anyObs = listObs.map((booleans) => {
return booleans.some(i => i)
});
...这样,当我改变aSbj,anyObs会发出正确的值:
const any;
anyObs.subscribe((anyVal) => any = anyVal); // any == false
aSbj.next([Observable.of(true), Observable.of(false)]);
// any == true
如果你只是想图个'布尔[ ]'到一个_'anyany'值,'boolean''本身不需要是'Observable'。他们是什么原因?你可以做'bools $ = Observable.of([false,false,false]);任何$ = bools $ .map(arr => arr.some(b => b));' –
我抽象了一些问题,但Observable是必要的。想象一下,单个布尔代表在一组切换中表示切换状态,并且其状态随着时间而改变。 –
它仍然不像'Observable'就在这里。如果数组中的第n个元素是它听起来的第n个切换的状态,那么通过它们自己的主题推送各个更新:'bool_subjects:Array >'。然后'Observable.combineLatest(bool_subjects).map((bools)=> bools.some(b => b))''。 –
concat