1
votes

Comment attendre que la fonction s'exécute complètement en angulaire

Bonjour, j'essaie d'obtenir les détails de l'utilisateur de manière angulaire et en fonction des valeurs de l'utilisateur dont j'ai besoin pour effectuer une tâche spécifique, je suis capable de passer l'appel à l'API mais la réponse prend du temps et c'est pourquoi je ne peux pas vérifier le condition.

getUserProfile(user: UserVM): Observable<any> {
return this.http.post<UserVM>(this.getAPI('FetchUserProfile'),user,
 this.httpOptions).pipe(
map(data => data),
catchError(this.handleError<any>('getUserProfile'))
);
}

Ici, l'utilisateur est l'objet de type UserVM Model qui contient le champ booléen PrivacyNotice

Voici la méthode de service qui fait l'appel de l'API

  ngOnInit() {

   this.getUserDetails();

  if(this.user.PrivacyNotice) //getting undefined here
  {

  }
  else
  {

  }
}

getUserDetails() {
  this.user.Email = "test@test.com";

  this.bookingListSubscription = 
  this.restService.getUserProfile(this.user).subscribe(
  data => {
   this.user = data;
  });
}

si je veux vérifier la valeur de l'indicateur booléen PrivacyNotice qui est renvoyé par l'API, comment puis-je y parvenir.


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser un opérateur map ou tap . Quelque chose comme ceci:

ngOnInit() {

  this.user.Email = "test@test.com";

  this.restService.getUserProfile(this.user)
    .subscribe((user) => {
      if ((this.user.PrivacyNotice))
      {
        -- -- --
      } else {
        -- -- --
      }    
    });
}

Ou mieux , débarrassez-vous simplement de la fonction getUserDetails en premier lieu car pour le moment, cela ne fonctionne pas Cela ne semble pas très utile:

import { tap } from 'rxjs/operators';

...    

ngOnInit() {

  this.getUserDetails()
    .subscribe((user) => {
      if ((this.user.PrivacyNotice))
      {
        -- -- --
      } else {
        -- -- --
      }    
    });
}

getUserDetails() {
  this.user.Email = "test@test.com";
  return this.restService.getUserProfile(this.user).pipe(
      tap(data => this.user = data)
    );
}


0 commentaires

1
votes

Habituellement, tant que vous êtes dans un état de chargement, vous affichez un indicateur de chargement:

Exemple:

<div *ngIf="loading else #loaded">
  Loading...
</div>
<ng-template #loaded>
  The data is loaded, display them as you wish
</ng-template>

et dans votre * .html p >

loading = ture;
ngOnInit() {
 this.getUserDetails();
}


getUserDetails() {
  this.user.Email = "test@test.com";

  this.bookingListSubscription = 
  this.restService.getUserProfile(this.user).subscribe(
  data => {
   this.user = data;
   if((this.user.PrivacyNotice))
   {
   ------
   }
   else
   {
   ------
   }
   loading = false;
  });
}


1 commentaires

Merci pour la réponse Monsieur



0
votes

cela peut être fait en utilisant une valeur booléenne. ici, j'ai pris terminé comme une valeur booléenne. Une fois les données attribuées à l'utilisateur, la valeur booléenne sera maintenant remplacée par true et vous pouvez l'utiliser selon vos besoins, que ce soit pour afficher un spinner d'appeler une méthode, etc.

completed=false;
 ngOnInit() {

 this.getUserDetails();
 if(completed){

if((this.user.PrivacyNotice)) //getting undefined here
{
   ------
}
else
{
   ------
}
}
}

getUserDetails() {
  this.user.Email = "test@test.com";

  this.bookingListSubscription = 
  this.restService.getUserProfile(this.user).subscribe(
  data => {
   this.user = data;
   this.completed=true;
  });
}

p >


1 commentaires

Merci pour la réponse Monsieur, je vais essayer