web-dev-qa-db-fra.com

Renvoyer une valeur de promesse en Angular 2, ionique 2

Je me familiarise avec Angular2, Ionic2 et Peut-être que je ne comprends pas bien quelque chose mais espérais de l'aide.

J'ai un fournisseur appelé «CurrentUser» dans le but de stocker et d'obtenir des données LocalStorage.

     getProfile(): any {
      this.local.get("user-profile").then((profile) => {
      var val = JSON.parse(profile);
      return val;
  });
}

cette fonction getProfile() renvoie une promesse

Si j'injecte ce fournisseur dans un composant. Comment pourrais-je attendre la promesse de résoudre avant d'affecter les données lors de l'appel de cette fonction depuis le composant?.

@Component({
   templateUrl: 'build/pages/book_meeting/book_meeting.html'
})
 export class BookMeetingPage implements OnInit {
 constructor(public navCtrl: NavController, private _currentUser: CurrentUser) {
}

profile: IProfile;

   ngOnInit(): any {
   this.profile = this._currentUser.getProfile();
   console.log(this.profile);//returns undefined
  }
}
7
Arianule

Tout d’abord, vous devez renvoyer this.local.get("user-profile") promise à partir de la fonction getProfile afin qu’elle puisse être chaînée lorsque vous appelez. Ensuite, vous pouvez obtenir les données renvoyées par la fonction getProfile dans le rappel .then success.

getProfile(): any {
   return this.local.get("user-profile").then((profile) => {
      var val = JSON.parse(profile);
      return val;
   });
);

De plus, vous ne pouvez pas obtenir de données dès que vous créez un fichier ajax. En cas de succès, vous pouvez obtenir la réponse.

ngOnInit(): any {
   this._currentUser.getProfile().then(
     value => { console.log(value) }
   )
}
9
Pankaj Parkar

Votre fonction getProfile ne renvoie aucune promesse. Il ne retourne rien ..__ Vous devriez le changer en

 getProfile(): any {
  return this.local.get("user-profile").then((profile) => {
  var val = JSON.parse(profile);
  return val;
 });

Désormais, dans votre composant, vous pouvez extraire les données de la variable de promesse de votre profil.

   ngOnInit(): any {
   this._currentUser.getProfile().then(value => {
        console.log(value); //returns your value.
  }
0
Omri L