2017-04-14 4 views
0

Ich habe versucht, Filterfunktion zurückzugeben, aber Rückkehr scheint nicht mit Rückrufen zu arbeiten. Hier this.store.let(getIsPersonalized$) ist eine beobachtbare emittierende boolesche Werte und this.store.let(getPlayerSearchResults$) ist eine beobachtbare emittierende Objekte der Videoklasse. Wie synchron ich das ausführen kann, kann ich asynchronen Rückruf insgesamt vermeiden, da ich die Observables nicht ändern kann, die von Speicher empfangen werden.Wie komme ich aus einem Beobachter zurück?

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;); 
} 

Antwort

0

Ich habe es auf diese Weise arbeiten, brauchen Sie nicht myFilter (vids) überhaupt, wenn Sie die Verzweigung auf isPersonalized$ ‚s abonnieren zu bekommen. Hier ist der aktualisierte Code.

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

Es sieht aus wie Sie den neuesten Wert von isPersonalized$ innerhalb der Map-Funktion ausgewertet werden sollen, würde ich die withLatestFrom über tun (Beispiel: Die ersten true/false all 5s schaltet, gibt die zweiten eine zunehmende Zahl alle 1s):

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]; 
    ... 
    }); 
Verwandte Themen