Ionic 2 / Angular 2 - 从全局变量中获取未定义的值



我遇到了一个奇怪的问题,我在全局变量中未定义,我想稍后使用它。我已经放了 2 个控制台.log((,棘手的部分是检查 2(作为控制台.log输出(首先触发而不是检查 1 (。请查看 TS 文件。在检查 1 中,我正确获取了值,但它在 setRadioButton 方法之后触发,我对为什么会这样发生有点困惑?

import { Component } from '@angular/core';
;import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { ToastController } from 'ionic-angular';
import { NativeStorage } from '@ionic-native/native-storage';
@Component({
  selector: 'page-profile',
  templateUrl: 'profile.html'
})
export class ProfilePage {
  userImg : any;
  userName : string;
  profileType :string;
  instr : boolean;
  stud :boolean;
  constructor(public navCtrl: NavController, private nativeStorage : NativeStorage) {
    this.nativeStorage.getItem("userLogin").then((data)=>{
       this.userImg = data.picture;
       this.userName = data.name;
    }).catch((c)=>console.log(c));
    this.nativeStorage.getItem("userProfile").then((data)=>{
      this.profileType = data.userProfileType; 
      console.log("Check 1",this.profileType);    
   }).catch((c)=>console.log(c));
   this.setRadioButton()
  }
  setRadioButton()
  {
    console.log("Check 2",this.profileType); 
    if(this.profileType == "Instructor")
    {
      this.instr = true;
      console.log("I")
    }
    if(this.profileType == "Student"){
      this.stud = true;
      console.log("S")
    }
  }
}

和控制台日志输出

FCMPlugin.js: is created
FCMPlugin.js:41 FCMPlugin Ready OK
bootstrap.js:10 Ionic Native: deviceready event fired after 1822 ms
index.js:411 DEVICE READY FIRED AFTER 1738 ms
profile.ts:29 Check 2 undefined
profile.ts:22 Check 1 Instructor

这是一个时间问题,您有两个异步调用,然后您有this.setRadioButton(),此函数将在其他两个异步调用之前运行。

如果您想在 profile.ts:22 检查 1 讲师之后运行this.setRadioButton(),让我们更改该代码以执行您想要的操作。

constructor(public navCtrl: NavController, private nativeStorage : NativeStorage) {
    this.nativeStorage.getItem("userLogin").then((data)=>{
       this.userImg = data.picture;
       this.userName = data.name;
    }).catch((c)=>console.log(c));
    this.nativeStorage.getItem("userProfile").then((data)=>{
      this.profileType = data.userProfileType; 
      console.log("Check 1",this.profileType);    
      this.setRadioButton(); // HERE, this is what you want.
   }).catch((c)=>console.log(c));
  }

相关内容

  • 没有找到相关文章

最新更新