在Angular 2,Ionic 2中返回一个promise值

时间:2016-09-30 10:01:57

标签: angular typescript promise ionic2

我熟悉Angular2,Ionic2和 也许我误解了一些事情,但希望得到帮助。

我有一个名为' CurrentUser'用于存储和获取LocalStorage数据。

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

此函数getProfile()返回一个承诺

如果我将此提供程序注入组件中。在从组件调用此函数时,如何在分配数据之前等待解析的承诺?。

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

2 个答案:

答案 0 :(得分:9)

首先,您必须从this.local.get("user-profile")函数返回getProfile承诺,以便在您致电时链接。此后,您可以在getProfile成功回调中获取从.then函数返回的数据。

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

答案 1 :(得分:0)

你的函数getProfile没有返回一个promise。它什么都不返回。 你应该把它改成

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

现在,在您的组件中,您可以从配置文件承诺变量中提取数据。

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