typescript - Returnere en promise-verdi i Angular 2, Ionic 2


Jeg gjør meg kjent med Angular2, Ionic2, og kanskje jeg misforstår noe, men håpet på hjelp.

Jeg har en leverandør kalt 'CurrentUser' for formålet med å lagre og hente LocalStorage-data.

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

denne funksjonen getProfile() returnerer et løfte

Hvis jeg injiserer denne leverandøren i en komponent. Hvordan ville jeg vente på at løftet skal bli oppfylt før jeg tildeler dataene når jeg kaller denne funksjonen fra komponenten?

@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
  }
}

Svar #1

Først må du returnere this.local.get("user-profile")-løftet fra getProfile-funksjonen slik at det kan kjedes når du kaller det. Deretter kan du hente dataene som returneres fra getProfile-funksjonen i .then-suksesskallbaken.

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

I tillegg kan du ikke få data med en gang du gjør en ajax, ved suksess av den kan du få svaret

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

Svar #2

Funksjonen din getProfile returnerer ikke et løfte. Den returnerer ingenting. Du bør endre den til

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

Nå i komponenten din kan du hente ut dataene fra profil-«promise»-variabelen din.

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

Relaterte artikler