Android 延迟访问离子2类中的属性

Android 延迟访问离子2类中的属性,android,angular,storage,ionic2,Android,Angular,Storage,Ionic2,我有一个非静态的交易文件,定期从服务器获取。我无法更改文件的格式 当我在我的Ionic应用程序中实例化一个新页面时,我从存储器中的一个值设置this.traducations。见下文: constructor(storage: Storage, public navCtrl: NavController, public navParams: NavParams, public commandeService: CommandeService, public alertCtrl: AlertCon

我有一个非静态的交易文件,定期从服务器获取。我无法更改文件的格式

当我在我的Ionic应用程序中实例化一个新页面时,我从存储器中的一个值设置
this.traducations
。见下文:

constructor(storage: Storage, public navCtrl: NavController, public navParams: NavParams, public commandeService: CommandeService, public alertCtrl: AlertController, public translate: TranslateService) {

    this.categorie = this.navParams.get('categorie');

    storage.get('boissons').then((StringBoissons) => {
      var boissons: Array<any> = JSON.parse(StringBoissons);
      this.boissons = boissons.filter(
        (value) => {
          return value.tboi_id == this.categorie.tboi_id;
        });
      }
    );
    storage.get('traductions').then((val) => {
      this.traductions = JSON.parse(val);
    });
    this.commande = commandeService.getCommande();
    this.translate = translate;
  }
在浏览器预览中一切正常,但在设备上我得到了一个

无法调用null的方法“find” 在t.GettRadion

我认为这是由于异步结果造成的,但我不能完全理解它,也不能想出如何解决这个问题


提前感谢您提供的任何见解

好的,非常愚蠢的问题: 您应该将getTradection函数放在提供程序中

@Injectable()
export class TraductionDynaService {

  traductions;

  constructor(
    public storage: Storage,
    public http: Http,
    public translate: TranslateService,
    ) {
    storage.get('traductions').then((val) => {
      this.traductions = JSON.parse(val);
    });
  }

  getTraduction(table, champ, id, objet) {
    var traduction = this.traductions.find( (value) => {
      return value.trad_table == table && value.trad_champ == champ && value.trad_code_langue == this.translate.currentLang && value.trad_id_item == objet[id];
    });
    if ( traduction && traduction.trad_texte  )
      return traduction.trad_texte;
    else
      return objet[champ];
  }

}

它就像一个符咒
getTraduction(…)
甚至可以在traduction为null或未定义时返回处理的承诺…

好的,非常愚蠢的问题实际上是: 您应该将getTradection函数放在提供程序中

@Injectable()
export class TraductionDynaService {

  traductions;

  constructor(
    public storage: Storage,
    public http: Http,
    public translate: TranslateService,
    ) {
    storage.get('traductions').then((val) => {
      this.traductions = JSON.parse(val);
    });
  }

  getTraduction(table, champ, id, objet) {
    var traduction = this.traductions.find( (value) => {
      return value.trad_table == table && value.trad_champ == champ && value.trad_code_langue == this.translate.currentLang && value.trad_id_item == objet[id];
    });
    if ( traduction && traduction.trad_texte  )
      return traduction.trad_texte;
    else
      return objet[champ];
  }

}
它就像一个符咒<代码>getTraduction(…)甚至可以在traduction为null或未定义时返回处理承诺