0
votes

Méthode de service angulaire pour renvoyer des données après la fin des demandes ASYNC

J'ai un composant qui appelle à un service pour obtenir des données; InitAllData () Code>.

Cette méthode effectue ensuite deux demandes pour certains 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>

Voici ma méthode : 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 :(

}


0 commentaires

3 Réponses :


0
votes

retourne forkjoin promesse du service. Forkjoin Promise devrait renvoyer le résultat combiné de toutes les données (this.Results dans votre cas).


0 commentaires

3
votes

Vous devez retourner une observable. Ne vous abonnez pas dans le initallData ​​code>, do xxx pré>

maintenant, le consommateur inadalldata ​​code> doit: P>

this.initAllData().subscribe(results => // now he has results


2 commentaires

Ceci vise simplement une erreur carte n'est pas défini , ai-je raté quelque chose?


En figuré, je devais importer l'opérateur de carte importer {map} de 'rxjs / opérateurs';



0
votes

retour à l'aide de la promesse xxx

appelez comme suit: - xxx


1 commentaires

Pourquoi passer de la recette observable pour promettre une recette?