2016-11-24 3 views
0

Во-первых, извините, мне не хватает английского.Angular2 rxjs множественный результат

Привет, я делаю что-то с угловым2.

Это часть моего кода.

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] [?]

, но я не могу получить всю их ценность. они возвращают только последний. как значение [?] < = это значение является пятым пользователем.

Я думаю, что они испускают ценность один за другим и перезаписывают себя.

, пожалуйста, помогите мне. Я спал всего 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 пользователей, и я хочу получить информацию о рейтинге игры для каждого поставщика сравнения. –

+0

Или есть другой способ, я могу это сделать? Поскольку я использую rxjs в первый раз, я не знаю, как используются другие функции. –

+0

Я сплю и встаю и проверяю следующий ответ. Прости. –

Смежные вопросы