2017-04-14 93 views
0

我试图返回过滤器函数,但返回似乎不起作用回调。这里this.store.let(getIsPersonalized$)是一个可观察的发射布尔值,this.store.let(getPlayerSearchResults$)是一个可观察的发射视频类的对象。 如何同步运行,我可以完全避免异步回调,因为我无法修改从商店收到的观察值。如何从观察者内部返回?

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(西元)所有,如果你可以得到分支出来isPersonalized$的订阅。这是更新的代码。

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

看起来你要评估的isPersonalized$地图功能中的最新值,我会做到这一点通过withLatestFrom(例如:第一个切换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]; 
    ... 
    });