web-dev-qa-db-ja.com

Angular 2、Ionic 2

私はAngular2、Ionic2に慣れ親しんでおり、何かを誤解しているかもしれませんが、支援を望んでいました。

LocalStorageデータの保存と取得を目的とした「CurrentUser」というプロバイダーがあります。

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

この関数getProfile()はpromiseを返します

このプロバイダーをコンポーネントに注入した場合。コンポーネントからこの関数を呼び出すときに、データを割り当てる前に解決するという約束をどのように待ちますか?.

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

まず、getProfile関数からthis.local.get("user-profile") promiseを返して、呼び出し時にチェーンできるようにする必要があります。その後、.then成功コールバックでgetProfile関数から返されたデータを取得できます。

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

さらに、ajaxを作成するとすぐにデータを取得できなくなり、成功すると応答を取得できます

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

関数getProfileはpromiseを返しません。何も返しません。に変更する必要があります

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

これでコンポーネント内で、プロファイルpromise変数からデータを抽出できます。

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