2017-08-25 32 views
0

私はリアクティブプログラミングには新しく、時には少し複雑です。RxJS観測可能なフィルタリングとグループ化

:[]

イベントサービスイベントからリストを考えると

は、私がグループにこの不可欠なスタイルで構造

GroupedByMonthEvent: 
{ 
monthYear: Date, 
event: Event 
} 

を以下に私はそれを書くにしたい

Event: 
{ 
beginDate: Date, 
name: string, 
type: State 
} 

State: 
{ 
    PENDING, FINISHED, UPCOMING 
} 

のように見えます

allEvents$: Observable<Tournament[]>; 
allEventsGrouped$: Observable<GroupedByMonthEvent[]>; 

... 
this.allEvents$ = this.store.select(state => state.events); 

this.allEventsGrouped$ = this.allEvents$.map(t => { 
     return _.chain(t).sortBy(function (value) { 
     return new Date(value.beginDate); 
     }) 
     .groupBy(function (event) { 
      return moment(event.beginDate).format('MMMM YYYY'); 
     }).toPairs() 
     .map(function (events: Event[]) { 
      return _.zipObject(['monthYear', 'events'], events); 
     }) 
     .value(); 
    }); 

次はそのObserverableをフィルタリングします。 私は.mapと.filterコレクションを試みましたが、私はそれを取得しません。 今、Observerableを購読して、それを古いものにフィルターします。

RxJSの魔法の助けを借りて、簡単な言葉でグループ化してフィルタリングすることができますか?

答えて

0

Observablesの素晴らしい世界へようこそ。

あなたはForkJoinを使用して一つに複数の観測を組み合わせることができます。https://www.learnrxjs.io/operators/combination/forkjoin.html

スニペット:

/* 
    when all observables complete, give the last 
    emitted value from each as an array 
*/ 
const example = Rx.Observable.forkJoin(
    //emit 'Hello' immediately 
    Rx.Observable.of('Hello'), 
    //emit 'World' after 1 second 
    Rx.Observable.of('World').delay(1000), 
    //emit 0 after 1 second 
    Rx.Observable.interval(1000).take(1), 
    //emit 0...1 in 1 second interval 
    Rx.Observable.interval(1000).take(2), 
    //promise that resolves to 'Promise Resolved' after 5 seconds 
    myPromise('RESULT') 
); 
//output: ["Hello", "World", 0, 1, "Promise Resolved: RESULT"] 
const subscribe = example.subscribe(val => console.log(val)); 

はここに、このリンクを参照してください。

関連する問題