如何从异步本地存储函数中获取值并将其传递给模态离子 2



我正在从本地存储中获取值并将其传递给模态。在代码中,代码中的console.log(obj);行打印obj的初始值,该值{selectedRadious: 500, DistanceUnit: 'Meters'}为异步函数this.storage.get()。如何处理它以获得本地存储价值?

let obj =  {selectedRadious: 500, DistanceUnit: 'Meters'};
this.storage.get('lastSetValue').then((val) => {
  if(val.selectedRadious){
    this.selectedRadious = val.DistanceUnit;
  }
  if(val.DistanceUnit){
    this.DistanceUnit = val.DistanceUnit;
  }
  obj = {selectedRadious: this.selectedRadious, DistanceUnit: this.DistanceUnit};
})
.catch(err=>{
});
console.log(obj);
let myModal = this.modalCtrl.create(SettingModalPage, obj);
myModal.onDidDismiss(data => {
console.log('modal value: '+data.DistanceUnit)
this.DistanceUnit = data.DistanceUnit;
this.selectedRadious = data.selectedRadious;
let objValue = {selectedRadious: this.selectedRadious, DistanceUnit: this.DistanceUnit};
this.storage.set('lastSetValue', objValue);
});
 myModal.present();

正如我在这里回答的那样:无法解析存储的所有参数:(?

您需要将访问值的代码从已解析的承诺移动到该承诺的.then()。由于它是异步操作,因此在使用它时,它可能不可用。

例如,这可以工作:

presentModal() {
    this.storage.get('distUnit').then((val) => {
        console.log('Your distUnit is', val);
        this.DistanceUnit = val;
        this.storage.get('SetRadious').then((val) => {
            console.log('Your SetRadious is', val);
            this.selectedRadious = val;
            this.modalCreator();
        })
        .catch(err=>{
            console.log('Your SetRadious dont exist: ' + JSON.stringify(err));
            this.selectedRadious = 500;
            this.modalCreator();
        });
    })
    .catch(err=>{
        console.log('Your distUnit dont exist: ' + JSON.stringify(err));
        this.DistanceUnit = 'Meters';
        this.storage.get('SetRadious').then((val) => {
            console.log('Your SetRadious is', val);
            this.selectedRadious = val;
            this.modalCreator();
        })
        .catch(err=>{
            console.log('Your SetRadious dont exist: ' + JSON.stringify(err));
            this.selectedRadious = 500;
            this.modalCreator();
        });
    });
}
modalCreator(){
    let obj = {selectedRadious: this.selectedRadious, DistanceUnit: this.DistanceUnit};
    let myModal = this.modalCtrl.create(SettingModalPage, obj);
    myModal.onDidDismiss(data => {
        console.log('modal value: '+data.DistanceUnit)
        this.DistanceUnit = data.DistanceUnit;
        this.selectedRadious = data.selectedRadious;
        this.storage.set('distUnit', this.DistanceUnit);
        this.storage.set('SetRadious', this.selectedRadious);
    });
    myModal.present();
}

如果您仔细阅读代码,您将知道我已经处理了获取两个参数以及其中一个参数是否失败的所有情况。检查一下,让我知道。

最新更新