【问题标题】:Returning a promise value in Angular 2, Ionic 2在 Angular 2、Ionic 2 中返回一个承诺值
【发布时间】:2017-02-08 20:59:59
【问题描述】:

我正在熟悉 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
  }
}

【问题讨论】:

    标签: angular typescript promise ionic2


    【解决方案1】:

    首先,您必须从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) }
       )
    }
    

    【讨论】:

    • 您好,我收到错误 app.bundle.js:44529 例外:错误:未捕获(承诺中):TypeError:无法读取未定义的属性“then”。
    • @Arianule 抱歉,我在回答中提到了,但忘了在代码部分更改相同的内容,我的错。感谢您的提醒。检查更新的代码
    • 你好,Pankaj。你更新代码了吗,抱歉。我应该返回一个 Promise...类似于 return Promise.resolve(val) 的东西吗?
    • @Arianule 我把这里的this.local.get("user-profile") 改成了return this.local.get("user-profile")
    • 啊啊,抱歉,现在我明白了。对不起...漫长的一天:-)
    【解决方案2】:

    您的函数 getProfile 没有返回承诺。它什么也不返回。 你应该把它改成

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

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 1970-01-01
      • 2017-08-04
      • 2023-03-09
      • 2018-08-16
      • 2017-02-21
      • 2019-11-17
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多