2016-11-24 61 views
0

首先,我很抱歉我没有足够的英语。Angular2 rxjs多重结果

嗨,我做了一些与angular2。

这是我的代码的一部分。

public computePredictedGameRate(targetGame: Game, targetUser: User, compareUsers: User[]):number { 
    var observableCompareUsers = Observable.from(compareUsers); 
    var result = -123; 

    Observable.forkJoin(
     this.gameRateService.getGameRatesById(targetUser.id), 
     observableCompareUsers.flatMap(compareUser => this.gameRateService.getGameRatesById(compareUser.id)), 
     observableCompareUsers.flatMap(compareUser => this.gameRateService.getGameRateByTitleAndId(targetGame.title, compareUser.id)) 
    ).subscribe(
     res => { 
     //something for result; 
     } 
    ); 
    return result; 
    } 

我想要得到它们的值。

this.gameRateService.getGameRatesById(compareUser.id) 
this.gameRateService.getGameRateByTitleAndId(targetGame.title, compareUser.id) 

compareUsers有5个用户。

所以,这些函数返回值[5] [?]

,但是,我不能让他们的整体价值。 他们只返回最后一个。 like value [?] < =这个值是第五个用户自己的。

我认为它们会逐个发出价值并覆盖自己。

请帮帮我。我睡了3个小时,连续2天。

+0

对不起,我必须迟到回复。我的国家在凌晨3点。 –

回答

0

Observable.forkJoin是这样工作的:

Observable.forkJoin(
    obs1, 
    obs2, 
    obs3 
).subscribe(result => { 
    const resultOfObs1 = result[0]; 
    const resultOfObs2 = result[1]; 
    const resultOfObs3 = result[2]; 
}); 

可以map的叉形结果,并返回一个新的可观察..

public computePredictedGameRate(
    targetGame: Game, 
    targetUser: User, 
    compareUsers: User[] 
): Observable<number> { // <<-- return's an Observable instead a number .. ! 

    var observableCompareUsers = Observable.from(compareUsers); 

    return Observable.forkJoin(
     this.gameRateService.getGameRatesById(targetUser.id), 
     observableCompareUsers.flatMap(compareUser => this.gameRateService.getGameRatesById(compareUser.id)), 
     observableCompareUsers.flatMap(compareUser => this.gameRateService.getGameRateByTitleAndId(targetGame.title, compareUser.id)) 
    ).map(res => { 
     const gameRatesById1 = res[0]; 
     const gameRatesById2 = res[1]; 
     const gameRatesByTitle = res[2]; 

     // do something with the results.. 
     // ..  

     return -123; // your numeric return value here ! 
    }); 
} 

然后调用它像这样:

computePredictedGameRate(game, user, users).subscribe(gameRate => { 
    console.log(gameRate); 
}); 
+0

我想要获得5个用户的游戏评分信息。但现在你只能得到关于一个的信息。 即使我使用你给我的方法,我也只能得到关于一个人的信息。 compareUsers是一个5位用户的列表,我想要获取每个compareUser的游戏评级信息。 –

+0

还有另一种方法可以做到吗?由于我第一次使用rxjs,所以我不知道如何使用其他函数。 –

+0

我睡着了,起床并检查下一个答案。对不起。 –