比方說,我有可觀察的可觀察名單:將可觀測數組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