0
votes

Bourse de service angulaire 7 httpClient sur la variable dans le composant TS

En résultat, je suis indéfini ?? J'utilise Contact API, en service reçoit des données sur le composant HTML, mais lorsque je console le résultat, je ne suis pas défini.

  element: any ;
  constructor(private service: BlockService) { }
   ngOnInit() {
        this.service.getSource().subscribe(async data=> {
        console.log(data)
        return  this.element  = await data
      })
    console.log(this.element )
  }


5 commentaires

Vous connectez les données avant de l'attendre.


Supprimer async et attendre. Et tout ce que vous voulez faire après la récupération des données, faites-le à l'intérieur du bloc de souscription.


Même après avoir éliminé l'acier indéfini


@HARDIKPATEL => a voulu dire qu'il n'y a aucun moyen d'obtenir des données en dehors de la souscription


J'ai d'abord besoin de comprendre votre cas pourquoi vous avez besoin de données en dehors de la fonction d'abonnement.


4 Réponses :


0
votes

Je ne pense pas que vous ayez besoin du async code> et du attendre code> mots clés. Le service est ASYNC par défaut

  element: any;
  constructor(private service: BlockService) {}
  ngOnInit() {
    this.service.getSource().subscribe(data => {
      console.log(data); // will log the data
      this.element = data;
    });
    console.log(this.element) // will log null/undefined.
  }


2 commentaires

Oui, il y a une explication pourquoi les données deviennent NULL même nous savons que le service est async !!?


Ce sera null / non défini car le code à l'intérieur de l'abonnement sera exécuté une seule tique après le reste du code, donc this.Element n'est pas encore initialisé.



0
votes

Essayez ceci xxx


3 commentaires

J'ai édité le code de code une fois si c'est ce que vous avez demandé


oui je comprends le code mais dans mon cas est si difficile de l'utiliser comme ça


Pouvez-vous l'ajouter dans Stackblitz ... afin que je puisse vous aider



0
votes

Vous pouvez utiliser

  element: any;
  constructor(private service: BlockService) { }
  async ngOnInit() {
    this.element = await this.service.getSource().toPromise();
    console.log(this.element)
  }


1 commentaires

yuh j'ai erreur core.js: 15723 Erreur d'erreur: non capturé (en promesse): TypeError: this.service.getsource (...). TOPROMISE n'est pas une fonction



0
votes

Ce n'est pas la manière dont le modèle d'observateur fonctionne que vous devez vous abonner au flux de données d'observateur pour récupérer des données. et vous ne pouvez pas saisir des données sans l'abonner! p>

donc il n'y a pas d'utilisation de async code> ou attendre code> l'opérateur de l'abonnement! p>

Dans ce scénario, vous pouvez avoir une variable à l'extérieur de la portée de bloc et Attribuez la valeur après avoir abonné à l'observateur P>

export class MyComponent {

  dataToPopulate: any = null;

  constructor(private service: BlockService) {}

  ngOnInit() {
    this.service.subscribe(
      data => dataToPopulate = {...data}, // for response 200 OK

      error => console.log(error), // handle network error here {400 or 500 etc}

      () => console.log(this.dataToPopulate) // complete callback hook
    )
  }

}


0 commentaires