2017-04-14 5 views
0

私はフィルタ関数を返そうとしていましたが、戻り値はコールバックでは機能しないようです。ここでthis.store.let(getIsPersonalized$)は観測可能な発光ブール値であり、this.store.let(getPlayerSearchResults$)はビデオクラスの観察可能な発光オブジェクトである。 これを同期的に実行するには、ストアから受け取ったオブザーバブルを変更できないとすれば、非同期コールバックを避けることができますか?あなたがさんが購読isPersonalized$に分岐を出すことができればオブザーバーから戻る方法は?

isPersonalized$ = this.store.let(getIsPersonalized$); 
videos$ = this.store.let(getPlayerSearchResults$)      
        .map((vids) => this.myFilter(vids)); 

myFilter(vids) { 
    this.isPersonalized$.subscribe((x){ 
     if(x){ 
     return this.fileterX(vids);//Return from here 
     } 
     else { 
     return this.filterY(vids);//Or Return from here 
     } 
    }); 
} 

fileterX(vids) { 
    return vids.filter((vid) => vids.views>100;); 
} 

fileterY(vids) { 
    return vids.filter((vid) => vids.views<20;); 
} 

答えて

0

私はこの方法を作業それを得た、あなたは全くmyFilterを(分割動画)を必要としません。ここに更新されたコードがあります。

this.store.let(getIsPersonalized$); 
    videos$: Observable<any>; 

    ngOnInit() { 
    this.isPersonalized$.subscribe((x) => { 
     if (x) { 
     this.videos$ = this.store.let(getPlayerSearchResults$) 
         .map((vids) => this. fileterX(vids)); 
     } else { 
     this.videos$ = this.store.let(getPlayerSearchResults$) 
         .map((vids) => this. fileterY(vids)); 
     } 
    }); 
    } 

    fileterX(vids) { 
    return vids.filter((vid) => vids.views>100;); 
    } 

    fileterY(vids) { 
    return vids.filter((vid) => vids.views<20;); 
    } 
0

それはあなたが、私はwithLatestFrom経由(例があることを行うだろうmap関数内isPersonalized$の最新の値を評価するようになっています。最初のものはtrue/falseごとに5秒を切り替え、第二は増えごとに1秒を発します):

const isPersonalized$ = Rx.Observable.interval(5000) 
    .map(value => value % 2 === 0); 
const getPlayerSearchResults$ = Rx.Observable.interval(1000) 
    .withLatestFrom(isPersonalized$) 
    .map(bothValues => { 
    const searchResult = bothValues[0]; 
    const isPersonalized = bothValues[1]; 
    ... 
    }); 
関連する問題