J'ai un composant qui appelle à un service pour obtenir des données; Cette méthode effectue ensuite deux demandes pour certains Voici ma méthode : P> InitAllData () Code>. JSON code> et utilise forkjoin code> pour manipuler les données une fois qu'il est retourné. Une fois que toutes les données ont été manipulées, je souhaite renvoyer les nouvelles données ( this.results code>) dans la méthode afin que je reçois cela dans mon composant. P> initAllData() {
// Get player data
this.players = this.getPlayersData();
// Get results data
this.scores = this.getResultsData();
forkJoin([this.players, this.scores]).subscribe(data => {
// data[0] is the players
// data[1] is the scores
let playersArray = data[0].Players;
let scoresArray = data[1].Results;
// Populate the results array by merging each player with their scores based on the PlayerId
this.results = playersArray.map(player => {
return Object.assign(
{},
player,
scoresArray.find(score => score.PlayerId === player.PlayerId),
{"Position": null}
);
});
// Sort the results array from highest TotalScore to lowest
this.results.sort((a, b) => b.TotalScore - a.TotalScore);
// Add a position value to the results
this.results.forEach((item, index) => {
item.Position = index + 1;
});
console.log(this.results)
});
return this.results // this is undefined until forkJoin completes :(
}
3 Réponses :
retourne forkjoin promesse du service. Forkjoin Promise devrait renvoyer le résultat combiné de toutes les données (this.Results dans votre cas). P>
Vous devez retourner une observable. Ne vous abonnez pas dans le maintenant, le consommateur initallData code>, do inadalldata code> doit: P> this.initAllData().subscribe(results => // now he has results
Ceci vise simplement une erreur carte n'est pas défini code>, ai-je raté quelque chose?
En figuré, je devais importer l'opérateur de carte importer {map} de 'rxjs / opérateurs'; code>
retour à l'aide de la promesse appelez comme suit: - p>
Pourquoi passer de la recette observable pour promettre une recette?