在 Angular 2、Ionic 2 中返回一个承诺值

Posted

技术标签:

【中文标题】在 Angular 2、Ionic 2 中返回一个承诺值【英文标题】:Returning a promise value in 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
  

【问题讨论】:

【参考方案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.
  

【讨论】:

以上是关于在 Angular 2、Ionic 2 中返回一个承诺值的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 2 在返回之前检查 observable

ionic 2 angular 2 在两列中分布绑定记录

Ionic 2 / Angular 2 中的全局函数

包括 ionic 2/angular 2 的通用标题栏

如何用管道翻译 Ionic/Angular 中 *ngFor 循环的返回

在父 html 中单击时,在 Angular 2/Ionic 中调用子方法