2016-11-24 13 views
0

まず、英語が足りないのは残念です。Angular2 rxjs multiple result

こんにちは、私は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) 

比較ユーザーには5人のユーザーがいます。

ので、機能は[5]の値を返す[?]

しかし、私は彼らの全体の値を取得することはできません。 最後に返されます。のような値[?] < =この値は5番目の所有者です。

私はそれらが1つずつ値を放出し、自分自身を上書きすると思います。

私を助けてください。私は2時間3時間しか寝なかった。このような

+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人のユーザーのゲームレーティング情報が必要です。しかし今では、あなたはただ1つについての情報を得ることができます。 私があなたに与えた方法を使用しても、私は1人の人に関する情報しか得ることができません。 compareUsersは5人のユーザーのリストで、各compareUserのゲーム評価情報を取得したいと考えています。 –

+0

または私はそれを行うことができる別の方法はありますか?私はrxjsをはじめて使用しているので、他の関数がどのように使われているか分かりません。 –

+0

私は眠っていると起きて、次の答えを確認してください。ごめんなさい。 –

関連する問題