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 ) }
4 Réponses :
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.
}
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 code> n'est pas encore initialisé.
Essayez ceci
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
Vous pouvez utiliser
element: any; constructor(private service: BlockService) { } async ngOnInit() { this.element = await this.service.getSource().toPromise(); console.log(this.element) }
yuh j'ai erreur core.js: 15723 Erreur d'erreur: non capturé (en promesse): TypeError: this.service.getsource (...). TOPROMISE n'est pas une fonction
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 ) } }
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.